@ControllerAdvice注解是一个增强的 Controller的注解。常用场景是全局异常处理
当前段请求后端服务时,后端代码报错了,在没有try-cache处理异常时,前段拿到的数据格式是非常乱的,为了统一前置拿统一的数据格式,就算是错误也应该有错误的格式,而不是乱七八糟的异常。这个时候我们可以使用这种全局异常来处理。
@ControllerAdvice
public class MyGlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResultEntity jsonErrorHandler(HttpServletRequest req, Exception e) {
log.error("exception", e);
return ResultBuilder.fail(ResponseEnum.ERROR);
}
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
@ResponseBody
public ResultEntity jsonErrorHandler(HttpServletRequest req, HttpRequestMethodNotSupportedException e) {
log.warn("exception", e);
return ResultBuilder.fail(ResponseEnum.REQUEST_ERROR);
}
}
@ExceptionHandler 注解用来指明异常的处理类型,当请求内只要抛出异常,都会被customException方法捕获。这时我们可以返给前段自定的异常格式数据。
常用注解二、
1、@JsonInclude注解
JsonJsonInclude.Include.NON_NULL 这个最常用,即如果加该注解的字段为null,那么就不序列化这个字段,这时前段对于null的字段都不拿不到。
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PolicyDTO {
@JsonInclude(JsonInclude.Include.NON_NULL)
@ApiModelProperty(value = "缴费期", dataType = "String")
private String payment;
}
这个可以作用在类上面,也可以作用在属性上面,当作用在类上面,这个类的所有字段都相当于加了这个注解。
2、@Accessors(chain = true)
这个可以博客里面的另一篇文章。
3、@Role
当在实例化一个A类时,该类有多个方法需要执行,比如方法上带有@Bean 或者 @Autowired这样的注解,那么在实例化之前,就需要先执行方法,那么这么多方法怎么执行执行优先级,就可以使用@Role