Java Web 学习笔记之十八:参数校验工具 ValidateUtils 的使用

简介

本文介绍上一篇文章的参数校验工具封装类 ValidateUtils 的基本使用方式。

使用

引入依赖

克隆parameter-validator代码,本地安装:

1
2
3
4
5
6
7
8
克隆代码(需要安装git版本控制工具)
git clone 'https://github.com/johnsonmoon/parameter-validator.git'

进入工程目录
cd parameter-validator

本地安装(需要安装maven项目工具)
maven install -Dmaven.test.skip=true

本地安装完成后,在Web项目中,引入依赖,maven工程代码如下:

1
2
3
4
5
<dependency>
<groupId>com.github.johnsonmoon</groupId>
<artifactId>parameter-validator</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

核心代码

创建前后端接口参数类型 TestParam 并定义字段及字段的参数约束规范,如下:

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import javax.validation.Valid;
import javax.validation.constraints.*;

@Valid
public class TestParam {
@NotNull(message = "id为空!")
@Min(value = 0, message = "id需要大于零!")
private Long id;
@Size(max = 20, message = "name长度不能超过20!")
@NotEmpty(message = "name不能为空!")
private String name;
@NotEmpty(message = "description不能为空!")
private String description;
@NotNull
@Min(value = 0, message = "age不能小于0!")
@Max(value = 150, message = "age不能大于150!")
private Integer age;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}
}

创建前后端接口,传参为上面定义的 TestParam,这里使用SpringBoot Web开发框架,定义接口如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import com.github.johnsonmoon.entity.ValidateResult;
import com.github.johnsonmoon.util.ValidateUtils;
import io.shulie.rule.action.check.entity.param.TestParam;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ValidateController {
@PostMapping("/test")
public ValidateResult<TestParam> test(@RequestBody TestParam param) {
return ValidateUtils.validate(param);
}
}

其中接口方法中直接使用ValidateUtils对参数进行校验,并直接将返回值返回给前端调用方。

测试结果

启动Web项目,使用Curl发送POST请求,请求体为TestParam实例的Json格式,测试结果如下:

测试示例 1

curl调用

1
curl -X 'POST' -H 'Content-Type:application/json' -d '{"id": -100, "name": "johnson", "description": "test", "age": -100}' http://127.0.0.1:9501/check/test

调用结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"source":{
"id":-100,
"name":"johnson",
"description":"test",
"age":-100
},
"success":false,
"propertyErrors":[
{
"property":"id",
"message":"id需要大于零!",
"invalidValue":-100
},
{
"property":"age",
"message":"age不能小于0!",
"invalidValue":-100
}
]
}

测试示例 2

curl调用

1
curl -X 'POST' -H 'Content-Type:application/json' -d '{"id": 1, "description": "test", "age": 24}' http://127.0.0.1:9501/check/test

调用结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"source":{
"id":1,
"name":null,
"description":"test",
"age":24
},
"success":false,
"propertyErrors":[
{
"property":"name",
"message":"name不能为空!",
"invalidValue":null
}
]
}

测试示例 3

curl调用

1
curl -X 'POST' -H 'Content-Type:application/json' -d '{"id": 2, "name": "johnson", "age": 180}' http://127.0.0.1:9501/check/test

调用结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"source":{
"id":2,
"name":"johnson",
"description":null,
"age":180
},
"success":false,
"propertyErrors":[
{
"property":"description",
"message":"description不能为空!",
"invalidValue":null
},
{
"property":"age",
"message":"age不能大于150!",
"invalidValue":180
}
]
}

测试示例 4

curl调用

1
curl -X 'POST' -H 'Content-Type:application/json' -d '{"id": 3, "name": "johnson", "description": "test", "age": 20}' http://127.0.0.1:9501/check/test

调用结果

1
2
3
4
5
6
7
8
9
10
{
"source":{
"id":3,
"name":"johnson",
"description":"test",
"age":20
},
"success":true,
"propertyErrors":null
}

代码仓库

https://github.com/johnsonmoon/parameter-validator.git