java validation validator 验证器

实体字段校验 @NotNull、@NotEmpty、@NotBlank
1.@NotNull

不能为 null,但可以为 empty,一般用在 Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制

2.@NotEmpty

不能为 null,且长度必须大于 0,一般用在集合类上或者数组上

3.@NotBlank

只能作用在接收的 String 类型上,注意是只能,不能为 null,而且调用 trim() 后,长度必须大于 0即:必须有实际字符

 

 

 

注意在使用 @NotBlank 等注解时,一定要和 @valid 一起使用,否则 @NotBlank 不起作用。
一个 BigDecimal 的字段使用字段校验标签应该为 @NotNull。
在使用 @Length 一般用在 String 类型上可对字段数值进行最大长度限制的控制。
在使用 @Range 一般用在 Integer 类型上可对字段数值进行大小范围的控制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@RequestMapping("/hello")
@RestController
@Api(tags = "HelloWorld 入口")
public class HelloWorld {
 
    @GetMapping("/world")
    @ApiOperation(value = "helloWorld")
    public String helloWorld() {
        return "hello world!";
    }
 
    @PostMapping("/test/param")
    @ApiOperation(value = "testParam")
    public BaseResponse<String> testParam(
            @Valid @RequestBody BaseRequest baseRequest
    ) {
        return BaseResponse.successResponse("参数校验成功");
    }
 
    @ApiOperation(value = "testOrderParam")
    @PostMapping("/test/order")
    public BaseResponse<String> testOrderParam(
            @Validated @RequestBody OrderRequest baseRequest
    ) {
        return BaseResponse.successResponse("参数校验成功");
    }
}

 

上面源码可以看到,testParam接口和testOrderParam两个接口使用的注解不一样,一个是@Valid、另一个是@Validated,两个稍有区别,前者使得当前对象内属性校验生效,如果包含对象属性,则对象属性自身的属性校验无法生效,而后者注释的对象,对象内部配合@Valid可以使得对象内部的对象属性的属性校验规则生效。

总结一下 @Validated 和 @Valid 在嵌套验证功能上的区别:

@Validated: 用在方法入参上无法单独提供嵌套验证功能。不能用在成员属性(字段)上,也无法提示框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。

@Valid: 用在方法入参上无法单独提供嵌套验证功能。能够用在成员属性(字段)上,提示验证框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。

 

Bean Validation规范中包含的22个注解,也就是validation-api(jakarta.validation-api)实现的注解:

每个注解都有message,groups,payload这三个属性,这是Bean Validation规范的要求。下表还列出了每个注解自有的一些属性。

 

 hibernate-validator额外实现的注解:

 

注解的可以到org.hibernate.validator.constraints包下面自行查看,这里仅列举几个常用的注解。

校验实现可以到org.hibernate.validator.internal.constraintvalidators包下面自行查看。其中bv包下是对javax.validation下注解的实现,hv包下是对org.hibernate.validator下注解的实现。

 

posted @   流失的痕迹  阅读(2958)  评论(0编辑  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
阅读排行:
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
点击右上角即可分享
微信分享提示