共计 1924 个字符,预计需要花费 5 分钟才能阅读完成。
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 中的错误信息