springboot常用注解

今天简单梳理一下实习中用过的注解(有的来源于baidu,侵权删)

一 bean的处理

依赖注入

@Autowired : 用来实现依赖注入,按by type自动注入(当设置required = false 找不到bean也不报错)
@Resource : 按byName自动注入

标注类被spring管理

@Component :通用的注解,可标注任意类为 Spring 组件
@Repository : 对应持久层即 Dao 层,主要用于数据库相关操作(一般可用MapperScan扫描dao层文件夹)
@Service : 对应服务层,主要涉及一些复杂的逻辑,操作数据库需要用到 Dao@Controller : 对应 Spring MVC 控制层,一般需要注入 Service 类返回结果数据
@RestController : 继承于 @Controller,区别在于标注后整个类所有方法将直接返回 JSON 数据,不再需要视图解析处理,用于前后端分离的项目后端都是直接用这个注解的
@Configuration : 声明配置类
@DependsOn注解可以配置Spring IoC容器在初始化一个Bean之前,先初始化其他的Bean对象
@Scope : 声明 Spring Bean 的作用域 ,scopeName 默认为空字符串 ( "" ),表示SCOPE_SINGLETON
	singleton:唯一 bean 实例,Spring 中的 bean 默认都是单例的。
	prototype:每次请求都会创建一个新的 bean 实例。
	request:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
	session:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

二 HTTP请求

4 种常见的http请求

@GetMapping : GET 请求,获取资源。
@PostMapping : POST 请求,创建一个新的的资源。
@PutMapping : PUT 请求,更新资源。
@DeleteMapping : DELETE 请求,删除资源。

三 前后端参数传递

@RequestParam 用在方法的参数前面,获取请求中表单类型的key=value格式的数据。
@PathVariable 用于获取请求路径中的参数/{id}@RequestBody
获取请求 body 中的数据, 请求体 的Content-Type 必须为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。
@ResponseBody
表示该方法的返回结果直接写入 HTTP response body 中,格式为 json。
@RestController  =  @Controller@ResponseBody 

值得一提的是:请求方法只可以有一个@RequestBody,如果你需要开启参数校验,需要加上@Valid,如果验证失败将抛出异常:MethodArgumentNotValidException
是可以有多个 @RequestParam 和 @PathVariable。

四 读取配置

System.getenv(“bser_url”) 读取环境变量

@value 读取application.properties 或者 application.yml的值
@ConfigurationProperties 读取配置与bean绑定
@PropertySource   这个注解是用来指定读取我们自定义的配置文件的()@PropertySource(value = {"classpath:my.properties"})

五 参数校验

需要注意的是:Spring Boot 2.3开始 要单独引入Hibernate Validator依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
    <version>2.5.5</version>
</dependency>

Bean字段验证注解(详细使用要百度一下)
@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 被注释的元素必须是一个将来的日期

@Validated
如用 @PathVariables 和 @RequestParam 注解来获取入参,需要在类上加@Validated告诉spring开启校验

六 统一异常处理

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

@ControllerAdvice
@ResponseBody
class GlobalDefaultExceptionHandler {
  // 如果是遇到注解中指定的异常就会进这个方法处理后返回
    @ExceptionHandler({MethodArgumentNotValidException.class, ConstraintViolationException.class})
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public Map argumentErrorHandler() {
    	//异常处理逻辑
        Map map = new HashMap();
        map.put("error", "参数不合法");
        map.put("param", req.getParameterMap());
        return map;
    }
}

柒 JSON格式处理

指定过滤字段

@JsonIgnoreProperties 作用在类上用于过滤掉特定字段不返回或者不解析。
@JsonIgnore一般用于类的属性上,作用和上面的@JsonIgnoreProperties 一样

@Data
@JsonIgnoreProperties({"password"})
public class User {
    private String userName;
    private String fullName;
    @JsonIgnore
    private String password;
}

格式化 json 数据

必须是返回JSON数据,才会格式化
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createDate;

扁平化对象
@JsonUnwrapped 代码会更好理解

@Data
public class Account {
  @JsonUnwrapped
  private Location location;
  @JsonUnwrapped
  private PersonInfo personInfo;

 @Data
  public static class Location {
     private String provinceName;
     private String countyName;
  }
  @Data
  public static class PersonInfo {
    private String userName;
    private String fullName;
  }
}


没加注解

{
    "location": {
        "provinceName":"上海",
        "countyName":"浦东"
    },
    "personInfo": {
        "userName": "long",
        "fullName": "程序员"
    }
}

加了后

{
  "provinceName":"上海",
  "countyName":"浦东",
  "userName": "long",
  "fullName": "程序员"
}

八 配置启动

@SpringBootApplication : 等价于使用 @Configuration@EnableAutoConfiguration@ComponentScan  三个注解。

@Configuration:声明是是一个 Java 形式的配置类,Spring Boot 提倡基于 Java 的配置,相当于你之前在 xml 中配置 bean;

@EnableAutoConfigurationSpring 实现自动配置的开关。

@ComponentScan:标注哪些路径下的类需要被Spring扫描。

九 跨域

@CrossOrigin 
注解将为请求处理类或请求处理方法提供跨域调用支持。
如果我们将此注解标注类,那么类中的所有方法都将获得支持跨域的能力。
使用此注解的好处是可以微调跨域行为

end 如有错误 欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值