Skip to content

Commit 808a6b7

Browse files
authored
feat: 升级到v0.4.0 beta (#45)
2 parents b290dec + e79c9eb commit 808a6b7

File tree

102 files changed

+2149
-936
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+2149
-936
lines changed

.editorconfig

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ end_of_line = crlf
44
indent_size = 4
55
indent_style = space
66
insert_final_newline = false
7-
max_line_length = 120
7+
max_line_length = 150
88
tab_width = 4
99
ij_continuation_indent_size = 8
1010
ij_formatter_off_tag = @formatter:off
@@ -35,7 +35,6 @@ ij_css_use_double_quotes = true
3535
ij_css_value_alignment = do_not_align
3636

3737
[*.java]
38-
max_line_length = 150
3938
ij_smart_tabs = true
4039
ij_visual_guides = 100
4140
ij_java_align_consecutive_assignments = false

.github/workflows/deploy-docs.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
push:
55
branches:
66
# 确保这是你正在使用的分支名称
7-
- docs
7+
- main
88
# 手动触发部署
99
workflow_dispatch:
1010

.github/workflows/mvn-test.yml

+12-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
name: run mvn test
22

3-
on: [ push, pull_request, workflow_dispatch ]
3+
on:
4+
push:
5+
branches:
6+
- 'v*'
7+
pull_request:
8+
branches:
9+
- 'v*'
10+
- 'main'
11+
types: [opened, synchronize, reopened]
12+
workflow_dispatch:
413

514
jobs:
615
run-mvn-test:
@@ -11,12 +20,12 @@ jobs:
1120
- uses: actions/setup-java@v4
1221
with:
1322
distribution: 'zulu'
14-
java-version: '8'
23+
java-version: '11'
1524
cache: maven
1625

1726
- run: |
1827
java -version
1928
mvn -v
2029
2130
- run: mvn verify
22-
- run: mvn clean test jacoco:report coveralls:report -DrepoToken="${{secrets.COVERALLS_TOKEN}}"
31+
- run: mvn clean test coveralls:report -DrepoToken="${{secrets.COVERALLS_TOKEN}}" -f pom.xml

.run/jacoco_report.run.xml

-46
This file was deleted.

document/web-docs/docs/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ actions:
1313

1414
features:
1515
- title: 易上手
16-
details: 设计直观,简单易用,与 javax.validation 使用方式高度相似,学习成本低,上手快。
16+
details: 设计直观,简单易用,与 jakarta.validation-api 使用方式高度相似,学习成本低,上手快。
1717
- title: 极致灵活
1818
details: 利用 SpEL(Spring Expression Language)的强大功能,轻松实现复杂验证逻辑,且能够直接调用已注入的 Spring Beans 进行验证。
1919
- title: 无缝集成
20-
details: 扩展自 javax.validation 包,只新增不修改,无缝集成到现有项目中。
20+
details: 扩展自 jakarta.validation-api 包,只新增不修改,无缝集成到现有项目中。
2121
- title: 上下文感知
2222
details: 能够在整个对象的上下文中进行验证,支持跨字段的逻辑验证,提高数据完整性检查的效率和准确性。
2323
- title: 异常友好
24-
details: 验证失败时自动整合进 javax.validation 的异常管理体系,简化错误处理流程。
24+
details: 验证失败时自动整合进 jakarta.validation-api 的异常管理体系,简化错误处理流程。
2525
- title: 完全可定制
2626
details: 支持创建自定义约束注解,允许根据具体业务需求灵活定义验证规则。
2727

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

+26
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,29 @@
5959
- 20线程,30循环,共9000次此请求,总耗时约为 1190ms,平均每个请求耗时约0.13ms,其中解析SpEL表达式的总耗时为 390ms,占比约33%。
6060

6161
这样看来,目前的性能表现还算可以接受,但还有优化空间,后续会继续优化。
62+
63+
## 如何对实体类单独进行校验
64+
65+
正常情况下,只需要触发 jakarta.validation-api 的校验,就会顺带触发 spel.validator 的校验。
66+
这一点可以参考下源码的测试工具`cn.sticki.spel.validator.jakarta.JakartaSpelValidator.validate`的实现,大概是下面这个样子:
67+
68+
```java
69+
private static final Validator validator = Validation.byDefaultProvider()
70+
.configure()
71+
.messageInterpolator(new ParameterMessageInterpolator())
72+
.buildValidatorFactory().getValidator();
73+
74+
/**
75+
* 参数校验
76+
* <p>
77+
* 调用此方法会触发 jakarta.validation.constraints.* 的校验,类似于使用 @Valid 注解
78+
*
79+
* @return 校验结果,如果校验通过则返回空列表
80+
*/
81+
public static <T> Set<ConstraintViolation<T>> validate(T obj) {
82+
return validator.validate(obj);
83+
}
84+
```
85+
86+
如果你的实体类中只有 spel.validator 的校验注解,或者你只想触发 spel.validator 的校验,
87+
那更简单,你只需要调用 `cn.sticki.spel.validator.core.SpelValidExecutor#validateObject` 即可触发校验。

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# 自定义约束注解
22

33
::: tip
4-
如果你使用过 `javax.validation` 的自定义约束注解,那么你会发现 `SpEL Validator` 的自定义约束注解几乎与 `javax.validation` 一致。
4+
如果你使用过 `jakarta.validation-api` 的自定义约束注解,那么你会发现 `SpEL Validator` 的自定义约束注解几乎与 `jakarta.validation-api` 一致。
55
:::
66

77
下面以 `@SpelNotBlank` 为例,展示如何实现自定义约束注解。

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
# 介绍
22

3-
SpEL Validator 是基于 Spring Expression Language 的参数校验包,也是 javax.validation 的扩展增强包,用于简化参数校验,它几乎支持所有场景下的参数校验。
3+
SpEL Validator 是基于 Spring Expression Language 的参数校验包,也是 jakarta.validation-api 的扩展增强包,用于简化参数校验,它几乎支持所有场景下的参数校验。
44

55
设计的初衷是为了解决一些需要判断另一个字段的值来决定当前字段是否校验的场景。
66

77
::: tip
88

9-
本组件的目的不是代替 `javax.validation` 的校验注解,而是作为一个扩展,方便某些场景下的参数校验。
10-
11-
原则上来说,能够使用 `javax.validation` 处理的场景就不应该使用 `spel-validator`
9+
本组件的目的不是代替 `jakarta.validation-api` 的校验注解,而是作为一个扩展,方便某些场景下的参数校验。
1210

1311
:::
1412

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

+34-31
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,36 @@
22

33
::: warning
44

5-
本组件的目的不是代替 `javax.validation` 的校验注解,而是作为一个扩展,方便某些场景下的参数校验。
5+
本组件的目的不是代替 `jakarta.validation-api` 的校验注解,而是作为一个扩展,方便某些场景下的参数校验。
66

7-
原则上来说,能够使用 `javax.validation` 处理的场景就不应该使用 `spel-validator`
7+
原则上来说,能够使用 `jakarta.validation-api` 处理的场景就不应该使用 `spel-validator`
88

99
:::
1010

1111
## 支持的版本
1212

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` 这两个版本即可。
1421

1522
## 添加依赖
1623

1724
Latest Version:
1825
[![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)
1926

20-
大多数情况下,你只需要添加以下两个依赖
27+
根据项目的实际情况,引入 `spel-validator-javax``spel-validator-jakarta`
2128

2229
```xml
2330
<dependencys>
2431
<dependency>
2532
<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>
3535
</dependency>
3636
</dependencys>
3737
```
@@ -54,7 +54,6 @@ Latest Version:
5454
需要满足以下两个条件,才会对带注解的元素进行校验:
5555

5656
1. 在接口参数上使用 `@Valid``@Validated` 注解
57-
2. 在实体类上使用 `@SpelValid` 注解
5857

5958
```java
6059
@RestController
@@ -67,7 +66,11 @@ public class ExampleController {
6766
}
6867

6968
}
69+
```
70+
71+
2. 在实体类上使用 `@SpelValid` 注解
7072

73+
```java
7174
@Data
7275
@SpelValid /*添加启动注解*/
7376
public class SimpleExampleParamVo {
@@ -79,7 +82,7 @@ public class SimpleExampleParamVo {
7982

8083
如果只满足第二个条件,那么不会对任何元素进行校验。
8184

82-
这是因为 `@SpelValid` 注解是基于 `javax.validation.Constraint` 实现的。
85+
这是因为 `@SpelValid` 注解是基于 `jakarta.validation.Constraint` 实现的。
8386
这就意味着,`@SpelValid``@NotNull``@NotEmpty``@NotBlank` 等注解一样,
8487
需要在 `@Valid``@Validated` 注解的支持下才会生效。
8588

@@ -91,7 +94,7 @@ public class SimpleExampleParamVo {
9194

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

94-
**表达式的算结果为true** 时,表示开启校验,默认情况下是开启的
97+
**表达式的算结果为true** 时,表示开启校验,默认情况下也是开启的
9598

9699
```java
97100
@Data
@@ -108,16 +111,16 @@ public class SimpleExampleParamVo {
108111

109112
目前支持的约束注解有:
110113

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` |
121124

122125
所有约束注解都包含三个默认的属性:
123126

@@ -178,9 +181,9 @@ public class SimpleExampleParamVo {
178181

179182
::: tip 为什么 @SpelValid 注解上的 spelGroups 属性不叫 groups?
180183

181-
因为 `@SpelValid` 注解是基于 `javax.validation.Constraint` 实现的,而 `Constraint` 中已经有一个 `groups` 属性了,故命名为 `spelGroups`
184+
因为 `@SpelValid` 注解是基于 `jakarta.validation.Constraint` 实现的,而 `Constraint` 中已经有一个 `groups` 属性了,故命名为 `spelGroups`
182185

183-
在使用 `@SpelValid` 的时候,你可以同时使用 `groups``spelGroups` 属性,但是 `groups` 属性只能用于 `javax.validation` 的分组校验。
186+
在使用 `@SpelValid` 的时候,你可以同时使用 `groups``spelGroups` 属性,但是 `groups` 属性只能用于 `jakarta.validation-api` 的分组校验。
184187
`@SpelValid``@NotNull``@NotEmpty` 等注解是兄弟关系,它的 `groups` 属性同样受上层 `@Valid``@Validated` 注解的影响。
185188

186189
:::
@@ -284,7 +287,7 @@ public class TestParamVo2 {
284287

285288
## 处理约束异常
286289

287-
当校验失败时,本组件会将异常信息上报到 `javax.validation` 的异常体系中。
290+
当校验失败时,本组件会将异常信息上报到 `jakarta.validation-api` 的异常体系中。
288291

289292
正常情况下,你只需要处理 `org.springframework.web.bind.MethodArgumentNotValidException`
290293
`org.springframework.validation.BindException` 这两个校验异常类就好了 ,而无需额外处理本组件的异常信息。
@@ -364,9 +367,9 @@ public class ParamTestBean {
364367

365368
![img.png](../image/user-g-business-exception.png)
366369

367-
由于本组件的特殊性,所有抛出的异常信息最终都会被我们下层的校验器捕获,然后包一层 `javax.validation.ValidationException` 再抛出。
370+
由于本组件的特殊性,所有抛出的异常信息最终都会被我们下层的校验器捕获,然后包一层 `jakarta.validation.ValidationException` 再抛出。
368371

369-
要从框架层面去解决这个问题,只能够脱离 `javax.validation` 的规范和 `hibernate` 的执行器来进行校验,
372+
要从框架层面去解决这个问题,只能够脱离 `jakarta.validation-api` 的规范和 `hibernate` 的执行器来进行校验,
370373
目前看来这样做的成本比较大,且会带来一些其他的影响,故暂时不考虑这样做。
371374

372375
### 解决方案

document/web-docs/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "spel-validator",
3-
"version": "0.3.0-beta",
4-
"description": "一个强大的 Java 参数校验包,基于 SpEL 实现,扩展自 javax.validation 包,几乎支持所有场景下的参数校验。",
3+
"version": "0.4.0-beta",
4+
"description": "一个强大的 Java 参数校验包,基于 SpEL 实现,扩展自 jakarta.validation-api 包,几乎支持所有场景下的参数校验。",
55
"license": "Apache-2.0",
66
"type": "module",
77
"scripts": {

0 commit comments

Comments
 (0)