Spring Bean参数校验Validator
以下2种形式能够用于所有的 Spring bean 不仅仅是 Controller 控制器。
一、原始类型参数
在控制器(或者其余Bean)上应用@Validated注解。
控制器类@RestController@RequestMapping("account")@Validatedpublic class AccountController { // ......}
在参数前增加校验注解
参数校验@GetMapping("account")public Result<AccountVO> getAccount(@NotNull Long accountId) { // ......}
二、表单对象参数
参数 AddressForm,增加 @Valid 注解。
表单校验@PostMapping("/address/save")public Object saveAddress(@Valid AddressForm addressForm) { // ......}
AddressForm 中增加注解:
表单校验@Datapublic class AddressForm { private Integer id; @NotBlank private String name; @NotBlank(message = "{mobile.not.blank}") @Pattern(regexp = "^1[34578]\\d{9}$") private String mobile; /** * list 汇合须要增加 @Valid 注解 */ @Valid private List<Xxx> list; // ...... }
留神: 示例中 {name.not.blank} 为国际化配置。国际化须要在配置文件下自定义 org/hibernate/validator/ValidationMessages.properties 配置文件。
三、Bean Validation 中罕用注解
@Null 被正文的元素必须为 null@NotNull 被正文的元素必须不为 null@NotBlank @NotBlank(message =) 验证字符串非null,且长度必须大于0@NotEmpty 被正文的字符串、汇合的必须非空@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 罕用注解@Email 被正文的元素必须是电子邮箱地址@Length(min=,max=) 被正文的字符串的大小必须在指定的范畴内@Range(min=,max=,message=) 被正文的元素必须在适合的范畴内
五、Validator 分组
分组名 形容QueryGroup 查问应用的分组CreateGroup 创立应用的分组UpdateGroup 更新应用的分组DeleteGroup 删除应用的分组
5.1 模型中增加 Validator 分组
模型示例public class SysConfig implements Serializable { /** * 主键ID */ @TableId(value = "id", type = IdType.AUTO) @Null(groups = CreateGroup.class) @NotNull(groups = UpdateGroup.class) private Long id; // 省略 }
5.2 控制器办法中指定应用的校验分组
控制器示例@ApiOperation("批改参数配置")@PostMappingpublic void edit(@Validated(UpdateGroup.class) @RequestBody SysConfig entity) { // 省略}
参考链接:
https://blog.csdn.net/qq_3100...
https://www.cnblogs.com/Never...
https://segmentfault.com/q/10...