Skip to content

Commit 34fdfd8

Browse files
committed
docs: 修改项目README文档
1 parent 1428593 commit 34fdfd8

File tree

1 file changed

+27
-123
lines changed

1 file changed

+27
-123
lines changed

README.md

+27-123
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,36 @@
1-
<h1 align="center">SpEL Validator</h1>
1+
# SpEL Validator
22

3-
<div align="center">
3+
[![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)
4+
[![license](https://img.shields.io/github/license/stick-i/spel-validator)](https://github.com/stick-i/spel-validator/blob/main/LICENSE)
45

5-
「SpEL Validator」是基于 SpEL 的参数校验包,也是 javax.validation 的扩展增强包,用于简化参数校验。
6+
一个强大的 Java 参数校验包,基于 SpEL 实现,扩展自 javax.validation ,用于简化参数校验,几乎支持所有场景下的参数校验
67

7-
</div>
8+
---
89

9-
## 📚 目录
10+
## 文档
1011

11-
[简介](#-简介) | [它解决了什么问题](#-它解决了什么问题) |
12-
[快速开始](#-快速开始) | [使用指南](#-使用指南) | [示例项目](#-示例项目) | [常见问题](#-常见问题) |
13-
[更新日志](#-更新日志) | [贡献指南](#-贡献指南) | [捐赠支持](#-捐赠支持) | [联系作者](#-联系作者)
12+
更详细的文档:https://spel-validator.sticki.cn/
1413

15-
## 📝 简介
16-
17-
### 特点
14+
## 特点
1815

16+
- 简单易用,使用方式几乎与 javax.validation 一致,学习成本低,上手快。
1917
- 强大的参数校验功能,几乎支持所有场景下的参数校验。
2018
- 扩展自 javax.validation 包,只新增不修改,无缝集成到项目中。
2119
- 基于 SpEL(Spring Expression Language) 表达式,支持复杂的校验逻辑。
2220
- 支持调用 Spring Bean,可在表达式中使用注入过的 Spring Bean。
2321
- 校验时基于整个对象,支持对象内字段间的校验逻辑。
2422
- 支持自定义校验注解,可根据业务需求自定义校验逻辑。
2523
- 无需额外的异常处理,校验失败时会上报到 javax.validation 的异常体系中。
26-
- 简单易用,使用方式几乎与 javax.validation 一致,学习成本低,上手快。
27-
28-
### 环境
2924

30-
目前仅测试了 JDK8 环境,理论上来说 JDK8+ 应该都是支持的。
25+
## 支持的环境
3126

32-
### 交流群
27+
JDK8+
3328

34-
<img src="./document/image/wechat-qrcode.jpg" alt="交流群二维码.jpg" style="width: 25%; height: auto;" />
29+
## 交流群
3530

36-
> 如果二维码过期,请添加微信号 `sticki6`,备注 `SpEL`,我拉你入群。
31+
请添加微信号 `sticki6`,备注 `SpEL`,我拉你入群。
3732

38-
## 💡 它解决了什么问题?
33+
## 它解决了什么问题?
3934

4035
- 枚举值字段校验:
4136
```java
@@ -84,18 +79,6 @@
8479
<artifactId>spel-validator</artifactId>
8580
<version>Latest Version</version>
8681
</dependency>
87-
88-
<dependency>
89-
<groupId>org.hibernate.validator</groupId>
90-
<artifactId>hibernate-validator</artifactId>
91-
<version>${hibernate-validator.version}</version>
92-
</dependency>
93-
94-
<dependency>
95-
<groupId>org.springframework.boot</groupId>
96-
<artifactId>spring-boot-starter-web</artifactId>
97-
<version>${spring-boot-starter-web.version}</version>
98-
</dependency>
9982
```
10083

10184
- 在接口参数上使用 `@Valid``@Validated` 注解
@@ -120,22 +103,23 @@
120103

121104
```java
122105
@Data
123-
@SpelValid
106+
@SpelValid // 添加启动注解
124107
public class SimpleExampleParamVo {
125108

126109
@NotNull
127110
private Boolean switchAudio;
128111

129112
/**
130-
* 当 switchAudio 为 true 时,校验 audioContent,audioContent 不能为null
113+
* 此处开启了注解校验
114+
* 当 switchAudio 字段为 true 时,校验 audioContent,audioContent 不能为null
131115
*/
132116
@SpelNotNull(condition = "#this.switchAudio == true", message = "语音内容不能为空")
133117
private Object audioContent;
134-
118+
135119
}
136120
```
137121

138-
- 添加异常处理器,处理校验异常
122+
- 添加全局异常处理器,处理校验异常
139123

140124
```java
141125
@RestControllerAdvice
@@ -220,94 +204,10 @@
220204
```
221205
</details>
222206

223-
## 📖 使用指南
224-
225-
> 注意:本组件的目的不是代替 `javax.validation` 的校验注解,而是作为一个扩展,方便某些场景下的参数校验。
226-
> 能够使用 `javax.validation` 的场景就不要使用 `spel-validator` ,因为 `spel-validator` 会有一定的性能损耗。
227-
228-
### 开启约束校验
229-
230-
需要满足以下两个条件,才会对带注解的元素进行校验:
231-
232-
1. 在接口参数上使用 `@Valid` 或 `@Validated` 注解
233-
2. 在实体类上使用 `@SpelValid` 注解
234-
235-
如果只满足第一个条件,那么只会对带 `@NotNull`、`@NotEmpty`、`@NotBlank` 等注解的元素进行校验。
236-
237-
如果只满足第二个条件,那么不会对任何元素进行校验。
238-
239-
这是因为 `@SpelValid` 注解是基于 `javax.validation.Constraint` 实现的,只有在 `@Valid` 或 `@Validated` 注解的支持下才会生效。
240-
而 `spel-validator` 提供的约束注解是基于 `@SpelValid` 进行扫描校验的,只有在 `@SpelValid` 注解生效的情况下才会执行约束校验。
241-
242-
### 使用约束注解
243-
244-
目前支持的约束注解有:
245-
246-
| 注解 | 说明 | 对标 javax.validation |
247-
|:---------------:|:---------------:|:-------------------:|
248-
| `@SpelAssert` | 逻辑断言校验 | 无 |
249-
| `@SpelNotNull` | 非 null 校验 | `@NotNull` |
250-
| `@SpelNotEmpty` | 集合、字符串、数组大小非空校验 | `@NotEmpty` |
251-
| `@SpelNotBlank` | 字符串非空串校验 | `@NotBlank` |
252-
| `@SpelNull` | 必须为 null 校验 | `@Null` |
253-
| `@SpelSize` | 集合、字符串、数组长度校验 | `@Size` |
254-
255-
每个约束注解都包含三个默认的属性:
256-
257-
- `message`:校验失败时的提示信息。
258-
- `group`:分组条件,支持 SpEL 表达式,当分组条件满足时,才会对带注解的元素进行校验。
259-
- `condition`:约束开启条件,支持 SpEL 表达式,当 表达式为空 或 计算结果为true 时,才会对带注解的元素进行校验。
260-
261-
### 调用 Spring Bean
262-
263-
默认情况下,解析器无法识别 SpEL 表达式中的 Spring Bean。
264-
265-
如果需要在 SpEL 表达式中调用 Spring Bean,需要在启动类上添加 `@EnableSpelValidatorBeanRegistrar` 注解,
266-
开启 Spring Bean 支持。
267-
268-
```java
269-
270-
@EnableSpelValidatorBeanRegistrar
271-
@SpringBootApplication
272-
public class Application {
273-
274-
public static void main(String[] args) {
275-
SpringApplication.run(Application.class, args);
276-
}
277-
278-
}
279-
```
280-
281-
### 自定义约束注解
282-
283-
参考 `cn.sticki.validator.spel.SpelConstraint` 类,实现自定义约束注解。
284-
285-
如果你使用过 `javax.validation` 的自定义约束注解,那么你会发现 `SpEL Validator` 的自定义约束注解几乎与 `javax.validation`
286-
一致。
287-
288207
## 📦 示例项目
289208

290209
- [spel-validator-example](https://github.com/stick-i/spel-validator-example)
291210

292-
## ❓ 常见问题
293-
294-
### 关于性能
295-
296-
代码里使用了较多的反射,会有一定的性能损耗,但我也加了一些缓存来减少损耗。
297-
298-
我进行了简单的测试,在示例项目中,我对接口进行了多次随机调用,除了刚开始的前几次请求耗时会达到 10ms 以上,
299-
后续请求耗时会稳定在 1ms 左右。
300-
301-
您可以打开 debug 日志,过滤 `Spel validate cost time` 语句,查看校验耗时,会得到类似如下的日志内容:
302-
303-
![执行耗时日志截图.png](document/image/performance-test.png)
304-
305-
其中每条记录表示一次接口调用的完整校验耗时。
306-
307-
## 📅 更新日志
308-
309-
https://github.com/stick-i/spel-validator/releases
310-
311211
## 🤝 贡献指南
312212

313213
非常欢迎您来参与项目贡献,但希望您可以先在 issue 中提出您的想法,我们可以一起讨论,然后再进行代码编写。
@@ -320,14 +220,18 @@ https://github.com/stick-i/spel-validator/releases
320220
- `docs`:文档分支,修改文档的内容将提交到这里。
321221
- `gh-pages`:GitHub Pages 分支,用于发布在线文档。
322222

323-
## 💰 捐赠支持
223+
## License
324224

325-
| 微信赞赏 | 支付宝赞赏 |
326-
|------------------------------------------------------|--------------------------------------------------|
327-
| ![微信](./document/image/wechat-appreciation-code.jpg) | ![支付宝](./document/image/alipay-receipt-code.jpg) |
225+
[Apache-2.0](https://github.com/stick-i/spel-validator/blob/main/LICENSE)
328226

329227
## 📧 联系作者
330228

331229
332230
- 微信: sticki6
333231
- 公众号: 程序员阿杆
232+
233+
## 💰 捐赠支持
234+
235+
| 微信赞赏 | 支付宝赞赏 |
236+
|------------------------------------------------------|--------------------------------------------------|
237+
| ![微信](./document/image/wechat-appreciation-code.jpg) | ![支付宝](./document/image/alipay-receipt-code.jpg) |

0 commit comments

Comments
 (0)