Spring&SpringMVC&SpringBoot常用注解总结

@SpringBootApplication

我们可以把 @SpringBootApplication看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。

@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制

@ComponentScan: 扫描被@Component (@Repository,@Service,@Controller)注解的 bean,注解默认会扫描该类所在的包下所有的类。

@Configuration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类

@RestController

@Controller和@ResponseBody的合集表示这是个控制器 bean,并且是将函数的返回值直接填入 HTTP 响应体中,是 REST 风格的控制器。

GET获取特定资源。举个例子:GET /users(获取所有学生)

POST创建一个新的资源。举个例子:POST /users(创建学生)

PUT更新服务器上的资源(客户端提供更新后的整个资源)。举个例子:PUT /users/12(更新编号为 12 的学生)

DELETE删除特定的资源。举个例子:DELETE /users/12(删除编号为 12 的学生)

@PathVariable 和 @RequestParam

@PathVariable用于获取路径参数,@RequestParam用于获取查询参数。

@GetMapping("/klasses/{klassId}/teachers")
public List<Teacher> getKlassRelatedTeachers(
         @PathVariable("klassId") Long klassId,
         @RequestParam(value="type", required=false) String type ) {
...
}

@RequestBody

用于读取 Request 请求的 body 部分并且Content-Type 为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用HttpMessageConverter或者自定义的HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。

一个请求方法只可以有一个@RequestBody,但是可以有多个@RequestParam和@PathVariable

@Value(常用)

读取比较简单的配置信息数据源application.yml

@Value("${spring.a}")
String wuhan2020;

@ConfigurationProperties

通过@ConfigurationProperties读取配置信息并与 bean 绑定。

@Component
@ConfigurationProperties(prefix="library")
class LibraryProperties {
    @NotEmpty
    private String location;
    private List<Book> books;
​
    @Setter
    @Getter
    @ToString
    static class Book {
        String name;
        String description;
    }
  省略getter/setter
  ......
}

一些常用的字段验证的注解
  • @NotEmpty 被注释的字符串的不能为 null 也不能为空

  • @NotBlank 被注释的字符串非 null,并且必须包含一个非空白字符

  • @Null 被注释的元素必须为 null

  • @NotNull 被注释的元素必须不为 null

  • @AssertTrue 被注释的元素必须为 true

  • @AssertFalse 被注释的元素必须为 false

  • @Pattern(regex=,flag=)被注释的元素必须符合指定的正则表达式

  • @Email 被注释的元素必须是 Email 格式。

  • @Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值

  • @Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值

  • @DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值

  • @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

  • @Size(max=, min=)被注释的元素的大小必须在指定的范围内

  • @Digits(integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内

  • @Past被注释的元素必须是一个过去的日期

  • @Future 被注释的元素必须是一个将来的日期

验证请求体(RequestBody)
@Data
@AllArgsConstructor
@NoArgsConstructor
publicclassPerson {
​
    @NotNull(message="classId 不能为空")
    private String classId;
​
    @Size(max=33)
    @NotNull(message="name 不能为空")
    private String name;
​
    @Pattern(regexp="((^Man$|^Woman$|^UGM$))", message="sex 值不在可选范围")
    @NotNull(message="sex 不能为空")
    private String sex;
​
    @Email(message="email 格式不正确")
    @NotNull(message="email 不能为空")
    private String email;
​
}

我们在需要验证的参数上加上了@Valid注解,如果验证失败,它将抛出MethodArgumentNotValidException。

@RestController
@RequestMapping("/api")
public class PersonController {
​
    @PostMapping("/person")
    public ResponseEntity<Person> getPerson(@RequestBody @Valid Personperson) {
        return ResponseEntity.ok().body(person);
    }
}

验证请求参数(Path Variables 和 Request Parameters)
@RestController
@RequestMapping("/api")
@Validated
public class PersonController {
​
    @GetMapping("/person/{id}")
    public ResponseEntity<Integer> getPersonByID(@Valid @PathVariable("id") @Max(value=5,message="超过 id 的范围了") Integer id) {
        return ResponseEntity.ok().body(id);
    }
}

JPA 相关

@Entity声明一个类对应一个数据库实体。

@Table 设置表名

@Id :声明一个字段为主键。

使用@Id声明之后,我们还需要定义主键的生成策略。我们可以使用 @GeneratedValue 指定主键生成策略。

@Column 声明字段

示例:

设置属性 userName 对应的数据库字段名为 user_name,长度为 32,非空

@Column(name="user_name", nullable=false, length=32)
private String userName;

设置字段类型并且加默认值,这个还是挺常用的。

@Column(columnDefinition="tinyint(1) default 1")
private Boolean enabled;

@Transient :声明不需要与数据库映射的字段,在保存的时候不需要保存进数据库 。

事务 @Transactional

作用于类:当把@Transactional 注解放在类上时,表示所有该类的 public 方法都配置相同的事务属性信息。

作用于方法:当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息。该注解只能应用到 public 方法上,否则不生效。

测试相关

@Test声明一个方法为测试方法

@Transactional被声明的测试方法的数据会回滚,避免污染测试数据。

@WithMockUser Spring Security 提供的,用来模拟一个真实用户,并且可以赋予权限。

    @Test
    @Transactional
    @WithMockUser(username = "user-id-18163138155", authorities = "ROLE_TEACHER")
    void should_import_student_success() throws Exception {
        ......
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值