需求:
在项目中加入注解校验
可以控制错误的操作
对于参数错误进行全局日志记录,方便后续查看
使用Hibernate JSP 303 整合到项目 https://juejin.im/post/5d3fbeb46fb9a06b317b3c48
https://zhuanlan.zhihu.com/p/49589845
ValidataUtils 此工具类配置可以大大减少配置https://github.com/hjzgg/usually_util/blob/master/spring-validate-demo/validator/ValidatorUtils.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 @Bean public Validator validator() { return new LocalValidatorFactoryBean(); } @Component public class ValidatorUtils implements ApplicationContextAware { @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { ValidatorUtils.validator = (Validator) applicationContext.getBean("validator"); } private static Validator validator; public static Optional<String> validateResultProcess(Object obj) { Set<ConstraintViolation<Object>> results = validator.validate(obj); if (CollectionUtils.isEmpty(results)) { return Optional.empty(); } StringBuilder sb = new StringBuilder(); for (Iterator<ConstraintViolation<Object>> iterator = results.iterator(); iterator.hasNext(); ) { sb.append(iterator.next().getMessage()); if (iterator.hasNext()) { sb.append(" ,"); } } return Optional.of(sb.toString()); } }
自定义校验器 https://www.jb51.net/article/174064.htm
自定义校验规则: https://songwell1024.github.io/2018/08/02/JSR303/
解决思路: 第一种:使用@Valid
加上 BindResult
注意事项: @valid
加入的DTO后面必须跟上 BindResult
1 @valid` 加入的DTO后面必须跟上 `BindResult``@valid` 加入的DTO后面必须跟上 `BindResult
,如果不按此规则,将会由Spring的 bindException
直接抛出异常
第二种:使用切面的方式统一处理异常 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Aspect @Component public class ControllerValidatorInterceptor { /** * 设置 around 环绕通知切面 */ @Around("execution(* com.aerexu.web.*.*(..)) && args(..,bindingResult)") public Object doAround(ProceedingJoinPoint pjp, BindingResult bindingResult) throws Throwable { Object retVal; if (bindingResult.hasErrors()) { retVal = doErrorHandle(); } else { retVal = pjp.proceed(); } return retVal; } }
实用bindResult 到最佳实践 https://vimsky.com/zh-tw/examples/detail/java-class-org.springframework.validation.BindingResult.html
真的写的十分好,这里分享出来
常用注解 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @Null 被注释的元素必须为null @NotNull 被注释的元素不能为null @AssertTrue 被注释的元素必须为true @AssertFalse 被注释的元素必须为false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @Size(max,min) 被注释的元素的大小必须在指定的范围内。 @Digits(integer,fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内 @Past 被注释的元素必须是一个过去的日期 @Future 被注释的元素必须是一个将来的日期 @Pattern(value) 被注释的元素必须符合指定的正则表达式。 @Email 被注释的元素必须是电子邮件地址 @Length 被注释的字符串的大小必须在指定的范围内 @NotEmpty 被注释的字符串必须非空 @Range 被注释的元素必须在合适的范围内