Spring 3.2提供了强大的新注解 @ControllerAdvice,主要是用来Controller的一些公共的需求的低侵入性增强提供辅助,作用于@RequestMapping标注的方法上。
和此注解配合使用的其他注解有:
1 .这次我们要用到他的一个特性就是 @ExceptionHandler ,可以作用于所有@RequestMapping方法上。
我们举个例子实现 用注解去验证前端传过来的javabean而不是自己去if判断,并且将验证异常返回的内容修改为我们的自己的json格式。
① 首先定义一个ControllerAdvice,必须将这个Advice会被Spring扫描到。
@ControllerAdvice
public class ValidateAdvice {
@ResponseBody
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public Result myErrorHandler(MethodArgumentNotValidException ex) {
return ResultUtil.error(ResultEnum.PARAM\_ERROR.getCode(),ex.getBindingResult().getFieldError().getDefaultMessage());
}
}
其中 MethodArgumentNotValidException 异常就是 @NotBlank 标注的字段触发后抛出的异常类型。
②其中要验证的JavaBean为
/**
* 经办人批转DTO
*/
@Data
public class TransforTaskDTO implements Serializable{
private static final long serialVersionUID = 3411962685906772077L;
// 不动产记录id
private String id;
// 变更的经办人id
@NotBlank(message = "用户id不能为空")
private String userId;
}
我们验证 userId字段。
③我们的Controller为
@PostMapping("/transferTaskForRegister")
public Result transferTask(**@Valid** @RequestBody TransforTaskDTO transforTaskDTO){
tRegisterProcessService.transforTask(transforTaskDTO);
return ResultUtil.success();
}
然后最重要的是 在 验证的bean前端一定要加@Valid 才会生效。
当前端传过来参数的时候,如果userId为空,那么会抛出 MethodArgumentNotValidException,然后会在我们的ControllerAdvice中拦截这个异常,并由我们处理,将他返回指定格式的Json.
手机扫一扫
移动阅读更方便
你可能感兴趣的文章