HibernateValidator-验证参数

68次阅读

共计 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 中的错误信息

正文完
 0