Spring Boot相关注解

Posted by shuyou on Wednesday, September 1, 2021

本文介绍Spring Boot开发web相关注解知识

基础web注解

Bean处理

  • @Component:通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注;
  • @Repository:对应持久层即 Dao 层,主要用于数据库相关操作;
  • @Service:对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层;
  • @Controller:对应 Spring MVC 控制层,一般需要注入 Service 类返回结果数据;
  • @RestController:继承于 @Controller,区别在于标注后整个类所有方法将直接返回 JSON 数据,不再需要视图解析处理,目前前后端分离的项目后端都是直接用这个注解的;
  • @Configuration:标注是 Java 代码的配置类, Spring Boot 中推荐这种做法不再使用 xml 配置了;
  • @Scope:声明 Spring Bean 的作用域,作用于一共有以下几种:
    • singleton:唯一 bean 实例,Spring 中的 bean 默认都是单例的。
    • prototype:每次请求都会创建一个新的 bean 实例。
    • request:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
    • session:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

HTTP请求

  • @RequestMapping:@RequestMapping(value="/test",method=RequestMethod.GET)可以指定路径和请求方法
  • @GetMapping:get请求注解
  • @PostMapping:post请求注解
  • @PutMapping
  • @DeleteMapping

前后端参数传递

  • @RequestParam:用在方法的参数前面,获取请求中表单类型的key=value格式的数据。
  • @PathVariable:用于获取请求路径中的参数。
  • @RequestBody:获取请求 body 中的数据,常用于搭配 @PostMapping 请求来提交对象数据. 请求体 的Content-Type 必须为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用 HttpMessageConverter 或者自定义的 HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。
  • @ResponseBody:表示该方法的返回结果直接写入 HTTP response body 中,格式为 json。上面我们提到的 @RestController 其实就是 @Controller 和 @ResponseBody 两个结合起来的。

读取配置

  • @value:可以在任意 Spring 管理的 Bean 中通过这个注解获取任何来源配置的属性值。
  • @ConfigurationProperties:指定该类是配置类,且可以指定配置前缀
  • @PropertySource:定读取我们自定义的配置文件的。
    @Component
    @ConfigurationProperties(prefix= "my" )
    @PropertySource(value = {"classpath:my.properties"})
    @Data
    public class MyProperties {
        private int maxValue= 0;
    }

参数校验

  • @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 被注释的元素必须是一个将来的日期

只需要在请求处理方法中需要验证的参数前加上 @Valid 注解就会开启校验了,如果验证失败将抛出异常:MethodArgumentNotValidException。

  • @Validated:如果你的入参不是用一个 Java 对象来接收的话,比如用 @PathVariables 和 @RequestParam 注解来获取入参,这种情况下要校验参数不要忘记在类的头上加 @Validated 注解,这个参数可以告诉 Spring 去校验方法参数。
    @RestController
    @RequestMapping("/user")
    @Validated
    public class UserController {
    @GetMapping("/{id}")
        public ResponseEntity<List<User>> findById( @PathVariable @Max(value = 5,message = "超过 id 的范围了") long id) {
            return new ResponseEntity(userService.findById(id),HttpStatus.OK);
        }
    }

统一异常处理

  • @ControllerAdvice:定义全局异常处理类,包含 @Component 所以可以被 Spring 扫描到。
  • @ExceptionHandler : 声明异常处理方法,表示遇到这个异常,就执行标注的方法。

配置启动

  • @SpringBootApplication:等价于使用 @Configuration、@EnableAutoConfiguration、@ComponentScan 三个注解。
  • @Configuration:声明是是一个 Java 形式的配置类,Spring Boot 提倡基于 Java 的配置,相当于你之前在 xml 中配置 bean;
  • @EnableConfigurationProperties: 指定配置类,并使配置类生效
  • @ComponentScan:标注哪些路径下的类需要被Spring扫描。
  • @Conditional:Spring4 新提供的注解,通过 @Conditional 注解可以根据代码中设置的条件装载不同的 bean,也是SpringBoot实现自动配置的基石。

「真诚赞赏,手留余香」

ShuYou's Blog

真诚赞赏,手留余香

使用微信扫描二维码完成支付