Spring boot 使用 AOP 处理请求验证
程序员文章站
2022-03-31 11:04:39
...
VO 声明验证
在 VO 中使用 javax.validation.constraints 包提供的验证注解:
@Data
public class AnchorRecordVO {
@NotNull(message = "基站编号不能为空")
private Long num;
@NotNull(message = "天线编号不能为空")
private Integer antId;
private String site;
...
}
Controller 中使用 @Valid
在请求参数前使用 @Valid 注解就可以完成验证,验证结果将存放到 BindingResult 中。
@RequestMapping(value = "/anchors", method = RequestMethod.POST)
@ResponseBody
public ResultBean addAnchor(@RequestBody @Valid AnchorRecordVO vo, BindingResult bindingResult) {
return new ResultBean(anchorService.save(vo));
}
使用 AOP 统一处理验证异常
声明一个带 BindingResult 参数的切点,并在其中处理验证结果:
@Aspect
@Component
public class ControllerAop {
private static final Logger logger = LoggerFactory.getLogger(ControllerAop.class);
@Around("execution(* cn.xxx.xxx.web.controller.*.*(..)) && args(.., bindingResult)")
public Object handlerControllerMethodWithValid(ProceedingJoinPoint pjp, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
ResultBean<?> result = new ResultBean();
String messages = bindingResult.getAllErrors()
.stream()
.map(ObjectError::getDefaultMessage)
.reduce((m1, m2) -> m1 + "," + m2)
.orElse("参数输入有误");
result.setMsg(messages);
result.setCode(FAIL);
return result;
} else {
return handlerControllerMethod(pjp);
}
}
...
}
推荐阅读
-
spring boot 使用Aop通知打印控制器请求报文和返回报文问题
-
spring boot中使用http请求的示例代码
-
spring boot请求异常处理并返回对应的html页面
-
spring boot 使用Aop通知打印控制器请求报文和返回报文问题
-
[Spring Boot]使用自定义注解统一请求返回值
-
Spring Boot使用AOP防止重复提交的方法示例
-
spring boot请求异常处理并返回对应的html页面
-
Spring Boot 使用 JSR303 实现参数验证
-
Spring Boot 使用 JSR303 实现参数验证
-
spring boot 使用RestTemplate信任所有https请求