1.添加 Hibernate-Validator 依赖,如果使用了springboot,则不需要引用任何依赖,因为spring-boot-starter-web包中已经包含了Hibernate-Validator 依赖
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.7.Final</version> </dependency>
2.在Vo类的属性上加上对应的注解
import javax.validation.constraints.NotBlank; public class FeedbackVo { @NotBlank(message = "核查结果中文不能为空") @ApiModelProperty(value="检查结果中文") private String cresults; @Valid //级联校验 @Size(max = 2,message = "不能超过12个") @ApiModelProperty(value="嫌疑人(集合)") private List<SuspectVo> suspects = new ArrayList<>(); get/set... }
@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(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator 附加的 constraint
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
3.在Controller中加上注解
@RestController @Validated @RequestMapping(path="/api/v1/feedback") @Api(value="阶段反馈controller",tags={"阶段反馈操作接口"}) public class FeedBackController { @ApiOperation(value="保存阶段反馈") @PostMapping @SystemControllerLog(descrption="保存阶段反馈",operator=OperatorType.create) @ResponseStatus(code=HttpStatus.CREATED) public void addFeedback(@Validated(value = Groups.Add.class)@RequestBody @Valid FeedbackVo feedbackVo, BindingResult bindingResult) throws Exception { // 参数校验 if (bindingResult.hasErrors()) { String messages = bindingResult.getAllErrors() .stream() .map(ObjectError::getDefaultMessage) .reduce((m1, m2) -> m1 + ";" + m2) .orElse("参数输入有误!"); throw new IllegalArgumentException(messages);} feedBackService.saveFeedback(feedbackVo); } }
对BindingResult的深入解析:如果在使用接口返回信息的时候,可以直接拿到bindingResult中的错误信息