转载

Hibernate-Validator 验证参数

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

原文  https://segmentfault.com/a/1190000019796478
正文到此结束
Loading...