在 Spring 项目中,可使用 Spring Validation 框架进行数据校验,它基于 JSR-303(Bean Validation 1.0)和 JSR-349(Bean Validation 1.1)规范。下面详细介绍如何实现以及给出示例。
步骤
- 添加依赖:若使用 Maven,需在
pom.xml
里添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 定义实体类:在实体类的字段上添加校验注解。
- 在控制器方法参数上使用
@Valid
注解:触发校验逻辑。 - 处理校验结果:若校验不通过,可捕获
BindException
或MethodArgumentNotValidException
异常。
示例代码
以下是一个完整的 Spring Boot 项目示例,用于演示如何进行数据校验:
User.java
package com.example.demo;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
public class User {
@NotBlank(message = "用户名不能为空")
@Size(min = 3, max = 20, message = "用户名长度必须在 3 到 20 之间")
private String username;
@NotBlank(message = "邮箱不能为空")
@Email(message = "请输入有效的邮箱地址")
private String email;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
UserController.java
package com.example.demo;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
@RestController
@Validated
public class UserController {
@PostMapping("/users")
public String createUser(@Valid @RequestBody User user, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return bindingResult.getAllErrors().get(0).getDefaultMessage();
}
return "用户创建成功";
}
}
DemoApplication.java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
代码解释
User
类:定义了用户实体,使用@NotBlank
、@Size
和@Email
等注解对字段进行校验。UserController
类:在createUser
方法的参数上使用@Valid
注解触发校验,通过BindingResult
对象获取校验结果。若校验不通过,返回第一条错误信息;若校验通过,返回“用户创建成功”。DemoApplication
类:Spring Boot 应用的启动类。
测试
你可以使用 Postman 或者其他工具发送 POST 请求到 /users
接口,请求体如下:
{
"username": "ab",
"email": "invalidemail"
}
此时,响应结果会返回校验失败的错误信息。若请求体中的数据通过校验,响应结果则为“用户创建成功”。