Skip to content

Commit f320c05

Browse files
committed
docs: 完善文档 使用指南#分组校验
1 parent 54ee201 commit f320c05

File tree

1 file changed

+82
-29
lines changed

1 file changed

+82
-29
lines changed

document/web-docs/docs/guide/user-guide.md

+82-29
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public class SimpleExampleParamVo {
8585

8686
### 设置开启条件
8787

88-
`@SpelValid` 注解包含一个属性 `condition`,支持 SpEL 表达式。
88+
`@SpelValid` 注解包含一个属性 `condition`,支持 SpEL 表达式,计算结果必须为 `boolean` 类型
8989

9090
**表达式的算结果为true** 时,表示开启校验,默认情况下是开启的。
9191

@@ -100,6 +100,46 @@ public class SimpleExampleParamVo {
100100
这里的 `condition` 字段同样支持上下文引用,具体使用方式参考 [引用上下文字段](#引用上下文字段)
101101

102102

103+
## 使用约束注解
104+
105+
目前支持的约束注解有:
106+
107+
| 注解 | 说明 | 对标 javax.validation |
108+
|:---------------:|:---------------:|:-------------------:|
109+
| `@SpelAssert` | 逻辑断言校验 | `@AssertTrue` |
110+
| `@SpelNotNull` | 非 null 校验 | `@NotNull` |
111+
| `@SpelNotEmpty` | 集合、字符串、数组大小非空校验 | `@NotEmpty` |
112+
| `@SpelNotBlank` | 字符串非空串校验 | `@NotBlank` |
113+
| `@SpelNull` | 必须为 null 校验 | `@Null` |
114+
| `@SpelSize` | 集合、字符串、数组长度校验 | `@Size` |
115+
| `@SpelMin` | 即将支持 | `@Min` |
116+
| `@SpelMax` | 即将支持 | `@Max` |
117+
118+
所有约束注解都包含三个默认的属性:
119+
120+
- `condition`:约束开启条件,支持 SpEL 表达式,表达式的计算结果必须为 `boolean` 类型,当 **计算结果为true** 时,才会对带注解的元素进行校验,默认情况下开启。
121+
- `message`:校验失败时的提示信息。
122+
- `group`:分组条件,支持 SpEL 表达式,当分组条件满足时,才会对带注解的元素进行校验。具体使用方式参考 [分组校验](#分组校验)
123+
124+
在需要校验的字段上使用 `@SpelNotNull` 等约束注解。
125+
126+
```java
127+
@Data
128+
@SpelValid
129+
public class SimpleExampleParamVo {
130+
131+
/**
132+
* 此处使用了 @SpelNotNull 注解
133+
* 当参数 condition 的计算结果 true 时,会启用对当前字段的约束,要求为当前字段不能为null
134+
* 约束校验失败时,提示信息为:语音内容不能为空
135+
*/
136+
@SpelNotNull(condition = "true", message = "语音内容不能为空")
137+
private Object audioContent;
138+
139+
}
140+
```
141+
142+
103143
## 引用上下文字段
104144

105145
设计这套组件的初衷,就是为了满足一些需要判断另一个字段的值来决定当前字段是否校验的场景。
@@ -126,52 +166,65 @@ public class SimpleExampleParamVo {
126166
```
127167

128168

129-
## 使用约束注解
169+
## 分组校验
130170

131-
目前支持的约束注解有:
171+
启动注解 `@SpelValid` 上包含一个属性 `spelGroups`,类型为字符串数组,支持 SpEL 表达式。
132172

133-
| 注解 | 说明 | 对标 javax.validation |
134-
|:---------------:|:---------------:|:-------------------:|
135-
| `@SpelAssert` | 逻辑断言校验 | `@AssertTrue` |
136-
| `@SpelNotNull` | 非 null 校验 | `@NotNull` |
137-
| `@SpelNotEmpty` | 集合、字符串、数组大小非空校验 | `@NotEmpty` |
138-
| `@SpelNotBlank` | 字符串非空串校验 | `@NotBlank` |
139-
| `@SpelNull` | 必须为 null 校验 | `@Null` |
140-
| `@SpelSize` | 集合、字符串、数组长度校验 | `@Size` |
141-
| `@SpelMin` | 即将支持 | `@Min` |
142-
| `@SpelMax` | 即将支持 | `@Max` |
173+
每一个[约束注解](#使用约束注解)上也都包含一个属性 `group`,类型为字符串数组,支持 SpEL 表达式。
143174

144-
所有约束注解都包含三个默认的属性:
175+
::: tip 为什么 @SpelValid 注解上的 spelGroups 属性不叫 groups?
145176

146-
- `message`:校验失败时的提示信息。
147-
- `group`:分组条件,支持 SpEL 表达式,当分组条件满足时,才会对带注解的元素进行校验。
148-
- `condition`:约束开启条件,支持 SpEL 表达式,当 **表达式为空****计算结果为true** 时,才会对带注解的元素进行校验。
177+
因为 `@SpelValid` 注解是基于 `javax.validation.Constraint` 实现的,而 `Constraint` 中已经有一个 `groups` 属性了,故命名为 `spelGroups`
149178

150-
在需要校验的字段上使用 `@SpelNotNull` 等约束注解。
179+
在使用 `@SpelValid` 的时候,你可以同时使用 `groups``spelGroups` 属性,但是 `groups` 属性只能用于 `javax.validation` 的分组校验。
180+
`@SpelValid``@NotNull``@NotEmpty` 等注解是兄弟关系,它的 `groups` 属性同样受上层 `@Valid``@Validated` 注解的影响。
181+
182+
:::
183+
184+
默认情况下,`@SpelValid.spelGroups` 为空,表示不进行分组校验,此时所有的约束注解都会生效。
185+
186+
`@SpelValid.spelGroups` 不为空时,表示开启分组校验,此时:
187+
188+
- 约束注解中的 `group` 属性为空时,该约束注解生效。
189+
- 约束注解中的 `group` 属性不为空时,只有当 `@SpelValid.spelGroups` 中的分组信息与此处的分组信息有交集时,才会对带注解的元素进行校验。
190+
191+
这里表达式的计算结果可以是任何类型,但只有两个计算结果满足 `o.equals(e)` 时,才被认为是相等的。
192+
193+
使用示例:
151194

152195
```java
153196
@Data
154-
@SpelValid
155-
public class SimpleExampleParamVo {
197+
@SpelValid(spelGroups = "#this.type")
198+
public class GroupExampleParamVo {
199+
200+
@NotNull
201+
@Pattern(regexp = "^text|audio$")
202+
private String type;
156203

157204
/**
158-
* 此处使用了 @SpelNotNull 注解
159-
* 当参数 condition 的计算结果 true 时,会启用对当前字段的约束,要求为当前字段不能为null
160-
* 约束校验失败时,提示信息为:语音内容不能为空
205+
* 当 type 字段的值为 text 时,才会对此字段进行校验
161206
*/
162-
@SpelNotNull(condition = "true", message = "语音内容不能为空")
207+
@SpelNotNull(group = "'text'")
208+
private Object textContent;
209+
210+
/**
211+
* 当 type 字段的值为 audio 时,才会对此字段进行校验
212+
*/
213+
@SpelNotNull(group = "'audio'")
163214
private Object audioContent;
164215

216+
/**
217+
* 未指定分组,默认被校验
218+
*/
219+
@SpelNotNull
220+
private Integer other;
221+
165222
}
166223
```
167224

168-
## 分组校验
169-
170-
待补充
171-
172225
## 嵌套校验
173226

174-
本组件支持嵌套校验,只需要在需要校验的字段上添加 `@Valid`,以及在另一个类上添加 `@SpelValid` 注解。
227+
本组件支持嵌套校验,在需要校验的字段上添加 `@Valid`,以及在另一个类上添加 `@SpelValid` 注解。
175228

176229
```java
177230
@Data

0 commit comments

Comments
 (0)