2
2
3
3
::: warning
4
4
5
- 本组件的目的不是代替 ` javax .validation` 的校验注解,而是作为一个扩展,方便某些场景下的参数校验。
5
+ 本组件的目的不是代替 ` jakarta .validation-api ` 的校验注解,而是作为一个扩展,方便某些场景下的参数校验。
6
6
7
- 原则上来说,能够使用 ` javax .validation` 处理的场景就不应该使用 ` spel-validator ` 。
7
+ 原则上来说,能够使用 ` jakarta .validation-api ` 处理的场景就不应该使用 ` spel-validator ` 。
8
8
9
9
:::
10
10
11
11
## 支持的版本
12
12
13
- - JDK8+
13
+ | 组件 | JDK | SpringBoot |
14
+ | --------------------------| -----| ------------|
15
+ | spel-validator-core | 8+ | 2.x, 3.x |
16
+ | spel-validator-constrain | 8+ | 2.x, 3.x |
17
+ | spel-validator-javax | 8+ | 2.x |
18
+ | spel-validator-jakarta | 11+ | 3.x |
19
+
20
+ 一般情况下,您只需要考虑使用 ` -javax ` 或 ` -jakarta ` 这两个版本即可。
14
21
15
22
## 添加依赖
16
23
17
24
Latest Version:
18
25
[ ![ Maven Central] ( https://img.shields.io/maven-central/v/cn.sticki/spel-validator.svg )] ( https://central.sonatype.com/search?q=g:cn.sticki%20a:spel-validator )
19
26
20
- 大多数情况下,你只需要添加以下两个依赖 :
27
+ 根据项目的实际情况,引入 ` spel-validator-javax ` 或 ` spel-validator-jakarta ` :
21
28
22
29
``` xml
23
30
<dependencys >
24
31
<dependency >
25
32
<groupId >cn.sticki</groupId >
26
- <artifactId >spel-validator</artifactId >
27
- <version >Latest Version</version >
28
- </dependency >
29
-
30
- <!-- 基于 javax.validation 标准的校验器实现类 -->
31
- <dependency >
32
- <groupId >org.hibernate.validator</groupId >
33
- <artifactId >hibernate-validator</artifactId >
34
- <version >6.2.5.Final</version >
33
+ <artifactId >spel-validator-jakarta</artifactId >
34
+ <version >0.4.0-beta</version >
35
35
</dependency >
36
36
</dependencys >
37
37
```
@@ -54,7 +54,6 @@ Latest Version:
54
54
需要满足以下两个条件,才会对带注解的元素进行校验:
55
55
56
56
1 . 在接口参数上使用 ` @Valid ` 或 ` @Validated ` 注解
57
- 2 . 在实体类上使用 ` @SpelValid ` 注解
58
57
59
58
``` java
60
59
@RestController
@@ -67,7 +66,11 @@ public class ExampleController {
67
66
}
68
67
69
68
}
69
+ ```
70
+
71
+ 2 . 在实体类上使用 ` @SpelValid ` 注解
70
72
73
+ ``` java
71
74
@Data
72
75
@SpelValid /* 添加启动注解*/
73
76
public class SimpleExampleParamVo {
@@ -79,7 +82,7 @@ public class SimpleExampleParamVo {
79
82
80
83
如果只满足第二个条件,那么不会对任何元素进行校验。
81
84
82
- 这是因为 ` @SpelValid ` 注解是基于 ` javax .validation.Constraint` 实现的。
85
+ 这是因为 ` @SpelValid ` 注解是基于 ` jakarta .validation.Constraint` 实现的。
83
86
这就意味着,` @SpelValid ` 和 ` @NotNull ` 、` @NotEmpty ` 、` @NotBlank ` 等注解一样,
84
87
需要在 ` @Valid ` 或 ` @Validated ` 注解的支持下才会生效。
85
88
@@ -91,7 +94,7 @@ public class SimpleExampleParamVo {
91
94
92
95
` @SpelValid ` 注解包含一个属性 ` condition ` ,支持 SpEL 表达式,计算结果必须为 ` boolean ` 类型。
93
96
94
- 当 ** 表达式的算结果为true** 时,表示开启校验,默认情况下是开启的 。
97
+ 当 ** 表达式的算结果为true** 时,表示开启校验,默认情况下也是开启的 。
95
98
96
99
``` java
97
100
@Data
@@ -108,16 +111,16 @@ public class SimpleExampleParamVo {
108
111
109
112
目前支持的约束注解有:
110
113
111
- | 注解 | 说明 | 对标 javax .validation |
112
- | :---------------:| :---------------:| :-------------------:|
113
- | ` @SpelAssert ` | 逻辑断言校验 | ` @AssertTrue ` |
114
- | ` @SpelNotNull ` | 非 null 校验 | ` @NotNull ` |
115
- | ` @SpelNotEmpty ` | 集合、字符串、数组大小非空校验 | ` @NotEmpty ` |
116
- | ` @SpelNotBlank ` | 字符串非空串校验 | ` @NotBlank ` |
117
- | ` @SpelNull ` | 必须为 null 校验 | ` @Null ` |
118
- | ` @SpelSize ` | 集合、字符串、数组长度校验 | ` @Size ` |
119
- | ` @SpelMin ` | 即将支持 | ` @Min ` |
120
- | ` @SpelMax ` | 即将支持 | ` @Max ` |
114
+ | 注解 | 说明 | 对标 jakarta .validation-api |
115
+ | :---------------:| :---------------:| :------------------------- :|
116
+ | ` @SpelAssert ` | 逻辑断言校验 | ` @AssertTrue ` |
117
+ | ` @SpelNotNull ` | 非 null 校验 | ` @NotNull ` |
118
+ | ` @SpelNotEmpty ` | 集合、字符串、数组大小非空校验 | ` @NotEmpty ` |
119
+ | ` @SpelNotBlank ` | 字符串非空串校验 | ` @NotBlank ` |
120
+ | ` @SpelNull ` | 必须为 null 校验 | ` @Null ` |
121
+ | ` @SpelSize ` | 集合、字符串、数组长度校验 | ` @Size ` |
122
+ | ` @SpelMin ` | 即将支持 | ` @Min ` |
123
+ | ` @SpelMax ` | 即将支持 | ` @Max ` |
121
124
122
125
所有约束注解都包含三个默认的属性:
123
126
@@ -178,9 +181,9 @@ public class SimpleExampleParamVo {
178
181
179
182
::: tip 为什么 @SpelValid 注解上的 spelGroups 属性不叫 groups?
180
183
181
- 因为 ` @SpelValid ` 注解是基于 ` javax .validation.Constraint` 实现的,而 ` Constraint ` 中已经有一个 ` groups ` 属性了,故命名为 ` spelGroups ` 。
184
+ 因为 ` @SpelValid ` 注解是基于 ` jakarta .validation.Constraint` 实现的,而 ` Constraint ` 中已经有一个 ` groups ` 属性了,故命名为 ` spelGroups ` 。
182
185
183
- 在使用 ` @SpelValid ` 的时候,你可以同时使用 ` groups ` 和 ` spelGroups ` 属性,但是 ` groups ` 属性只能用于 ` javax .validation` 的分组校验。
186
+ 在使用 ` @SpelValid ` 的时候,你可以同时使用 ` groups ` 和 ` spelGroups ` 属性,但是 ` groups ` 属性只能用于 ` jakarta .validation-api ` 的分组校验。
184
187
` @SpelValid ` 和 ` @NotNull ` 、` @NotEmpty ` 等注解是兄弟关系,它的 ` groups ` 属性同样受上层 ` @Valid ` 或 ` @Validated ` 注解的影响。
185
188
186
189
:::
@@ -284,7 +287,7 @@ public class TestParamVo2 {
284
287
285
288
## 处理约束异常
286
289
287
- 当校验失败时,本组件会将异常信息上报到 ` javax .validation` 的异常体系中。
290
+ 当校验失败时,本组件会将异常信息上报到 ` jakarta .validation-api ` 的异常体系中。
288
291
289
292
正常情况下,你只需要处理 ` org.springframework.web.bind.MethodArgumentNotValidException `
290
293
和 ` org.springframework.validation.BindException ` 这两个校验异常类就好了 ,而无需额外处理本组件的异常信息。
@@ -364,9 +367,9 @@ public class ParamTestBean {
364
367
365
368
![ img.png] ( ../image/user-g-business-exception.png )
366
369
367
- 由于本组件的特殊性,所有抛出的异常信息最终都会被我们下层的校验器捕获,然后包一层 ` javax .validation.ValidationException` 再抛出。
370
+ 由于本组件的特殊性,所有抛出的异常信息最终都会被我们下层的校验器捕获,然后包一层 ` jakarta .validation.ValidationException` 再抛出。
368
371
369
- 要从框架层面去解决这个问题,只能够脱离 ` javax .validation` 的规范和 ` hibernate ` 的执行器来进行校验,
372
+ 要从框架层面去解决这个问题,只能够脱离 ` jakarta .validation-api ` 的规范和 ` hibernate ` 的执行器来进行校验,
370
373
目前看来这样做的成本比较大,且会带来一些其他的影响,故暂时不考虑这样做。
371
374
372
375
### 解决方案
0 commit comments