Java validation
在Java Web开发中,会在Controller层做参数校验、参数处理,可以使用if条件语句进行校验,也可以使用Java EE规范中提供的注解进行校验。Java EE规范中javax.validation包下会定义一些参数校验规范,然后有hibernate-validator实现具体的校验规则。
一 普通的校验方式
@Data
public class MangoJob {private Integer id;private String name;private String type;private String telephone;private Date date;private Integer number;
}
@RestController
@RequestMapping("/mango/job")
public class MangoJobController {@PostMapping("/saveMangoJob")public ResponseResult<String> saveMangoJob(@RequestBody MangoJob mangoJob) {// 校验参数if (StringUtils.isBlank(mangoJob.getName())) {return ResponseResult.fail("作业名称不能为空");}if (StringUtils.isBlank(mangoJob.getType())) {return ResponseResult.fail("作业类型不能为空");}if (mangoJob.getNumber() < 10) {return ResponseResult.fail("作业数量不能小于10");}// 业务逻辑System.out.println("mangoJob is: " + mangoJob);System.out.println("mangoJob name is: " + mangoJob.getName());return ResponseResult.success("添加数据成功");}}
普通方式校验参数一开始就会占据大篇幅代码,然后再开始写真正的业务逻辑,而且多个接口中都有用到相关参数时,就又要重复上述校验代码,还有不同的接口中对参数使用不同,还不能将校验逻辑单独抽取成一个方法,所以可以使用Java EE规范提供的校验注解简化代码开发。
二 Java注解式校验参数
javax.validation包下定义的常用校验约束注解:
javax.validation.constraints.Null | @Null | 被注解元素必须为null |
javax.validation.constraints.NotNull | @NotNull | 被注解元素不能为null |
javax.validation.constraints.NotEmpty | @NotEmpty | 集合/数组/字符串不能为null,且长度大于0 |
javax.validation.constraints.NotBlank | @NotBlank | 字符串不能为null,且trim后长度大于0 |
javax.validation.constraints.AssertTrue | @AssertTrue | 字段必须为true |
javax.validation.constraints.AssertFalse | @AssertFalse | 字段必须为false |
javax.validation.constraints.Min | @Min | 整数数值必须大于等于指定值 |
javax.validation.constraints.Max | @Max | 整数数值必须小于等于指定值 |
javax.validation.constraints.DecimalMin | @DecimalMin | 数值类型大于(等于)指定值 |
javax.validation.constraints.DecimalMax | @DecimalMax | 数值类型小于(等于)指定值 |
javax.validation.constraints.Size | @Size | 限制集合/数组/字符串的长度范围 |
javax.validation.constraints.Digits | @Digits | 限制数值整数和小数部分的位数 |
javax.validation.constraints.Past | @Past | 日期必须是过去时间 |
javax.validation.constraints.PastOrPresent | @PastOrPresent | 日期必须是过去时间包含当前时间 |
javax.validation.constraints.Future | @Future | 日期必须是将来时间 |
javax.validation.constraints.FutureOrPresent | @FutureOrPresent | 日期必须是将来时间包含当前时间 |
javax.validation.constraints.Positive | @Positive | 数值必须为正数 |
javax.validation.constraints.Negative | @Negative | 数值必须为负数 |
javax.validation.constraints.PositiveOrZero | @PositiveOrZero | 数值必须为正数或0 |
javax.validation.constraints.NegativeOrZero |