下面是 SpringMVC 使用 JSR-303 进行校验的完整攻略:
1. 添加依赖
在 pom.xml 添加如下依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.17.Final</version>
</dependency>
2. 创建验证规则
使用 JSR-303 注解定义验证规则,例如下面的代码:
public class User {
@NotNull(message = "姓名不能为空")
private String name;
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
private String phone;
@Email(message = "邮箱格式不正确")
private String email;
// 省略 getter 和 setter
}
这段代码定义了一个 User
类,其中有 name
、phone
、email
三个字段,使用了 @NotNull
、@Pattern
和 @Email
注解分别对这三个字段进行了校验。
3. 编写控制器
在控制器方法中使用 @Valid
注解校验请求参数,例如下面的代码:
@RestController
public class UserController {
@PostMapping("/users")
public String addUser(@Valid @RequestBody User user, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return bindingResult.getFieldError().getDefaultMessage();
}
// 执行添加用户的逻辑
return "success";
}
}
这段代码中,@Valid
注解用于校验请求参数中的 User
对象,如果有校验错误,会将错误信息放入 BindingResult
对象中。如果校验成功,则执行添加用户的逻辑。
4. 测试
我们使用 Postman 发送一条 POST 请求,请求的 body 内容为:
{
"name": null,
"phone": "12345678900",
"email": "example.com"
}
根据我们之前定义的校验规则,name
字段不能为空,phone
字段必须是手机号格式,email
字段必须是邮箱格式。因此这个请求会校验失败,返回如下错误信息:
姓名不能为空
5. 示例二
为了更好地说明 SpringMVC 使用 JSR-303 进行校验 @Valid 的使用方法,这里提供另外一条示例:
@RestController
public class UserController {
@PostMapping("/users")
public String addUser(@Valid UserInfo userInfo, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return bindingResult.getFieldError().getDefaultMessage();
}
return "success";
}
}
public class UserInfo {
@NotNull(message = "username 不能为空")
private String username;
@NotNull(message = "age 不能为空")
private Integer age;
@Max(value = 10, message = "score 不得超过 10")
@Min(value = 0, message = "score 不得低于 0")
private Integer score;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
}
这个示例和之前的示例非常相似,只不过这里使用的是 UserInfo
类而不是 User
类。注意,这里没有使用 @RequestBody
注解,因此直接使用 UserInfo
类即可,而不需要使用 @RequestBody UserInfo
。
我们发起一条 POST 请求,请求的 body 内容为:
{
"username": null,
"age": 20,
"score": 11
}
这个请求会校验失败,返回如下错误信息:
username 不能为空
score 不得超过 10
这里的校验规则也非常明显,在 UserInfo
类中,username
字段不能为空,age
字段不能为空整数,score
字段必须在 0 和 10 之间。如果有任意一个校验失败,会返回对应的错误信息。
以上就是 SpringMVC 使用 JSR-303 进行校验 @Valid 的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC 使用JSR-303进行校验 @Valid示例 - Python技术站