在我们创建Springboot项目时,可以在开始时添加很多依赖项,勾选几个复选框就可以完成依赖的添加,这些依赖中的框架可以极大地提高我们的开发效率,简直是老 6 一般的存在。在做web项目开发时,我们经常会苦于去写各种分支判断去验证客户端发过来的request请求是否符合我们的业务标准及要求,各种正则表达式会让你累感不爱。那么请记住:在java中只要你觉得繁琐重复的代码,一定有大佬帮你写好了!!!在此感谢各种大佬!!!
Validation 验证框架是 由Java EE 提供的一套api,主要用于Java bean的验证(不止于controller)javax.validation.api。我们可以在创建SpringBoot项目时勾选io>validation,如下
当然,也可以在maven pom.xml中添加dependency,如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
当我们需要检查请求参数时,直接在处理请求的方法的参数列表中,对需要检查的参数添加@Validated
注解,表示此参数是需要通过Spring Validation进行检查的:
@PostMapping("/add-new")
public String addNew(@Validated ProductAddNewDTO productAddNewDTO) {
// 省略方法体的代码
}
同时我们还需要在数据传输类DTO中加上你需要的注解,例如:
@Data
public class ProductAddNewDTO implements Serializable {
@NotNull(message = "必须提交产品名称!")
private String name;
@NotNull(message="必须提交产品描述")
private String description;
@NotNull(message = "必须提交自定义排序序号!")
@Range(max = 99, message = "自定义排序序号必须是0~99之间的值!")
private Integer sort;
}
同时这个框架为我们提供了强大丰富的注解,以满足我们对用户提交数据的各种要求和限制如下:
一些注解的注意事项如下:
@Pattern:通过此注解的regexp
属性配置正则表达式,并使用message
配置验证失败时的提示文本
此注解只能添加在字符串类型的属性上,
此注解不能检查“为null
”的情况,如果不允许为null
,则必须同时配置@NotNull
和@Pattern
@Range:通过此注解的min
和max
属性可以指定整型数据的最小值和最大值,此注解可以和@NotNull
一起使用
另外我们来看下@Validated的源码
可以看到这个注解可以在类、方法、参数上面添加,而@NotNull @Range等注解的作用域范围就更广泛一些,这里就不贴源码了。可以自行查看
当Spring Validation检查不通过时,将抛出BindException
,所以,可以在统一处理异常的类中对此类异常进行处理:如下
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler
public String handleBindException(BindException e) {
log.debug("处理BindException:{}", e.getMessage());
StringBuilder stringBuilder = new StringBuilder();
List<FieldError> fieldErrors = e.getFieldErrors();
for (FieldError fieldError : fieldErrors) {
String message = fieldError.getDefaultMessage();
stringBuilder.append(message);
}
return stringBuilder.toString();
}
}
上面e.getMessage中输出的内容有很多不便于我们查看分析的其他字段,所以利用e.getFieldErrors()获取到 当初我们在DTO类中的变量上具体设置的message内容。然后利用StringBuilder拼接 并输出到控制台。