在 Spring 项目中,可使用 Spring Validation 框架进行数据校验,它基于 JSR-303(Bean Validation 1.0)和 JSR-349(Bean Validation 1.1)规范。下面详细介绍如何实现以及给出示例。

步骤

  1. 添加依赖:若使用 Maven,需在 pom.xml 里添加以下依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  1. 定义实体类:在实体类的字段上添加校验注解。
  2. 在控制器方法参数上使用 @Valid 注解:触发校验逻辑。
  3. 处理校验结果:若校验不通过,可捕获 BindExceptionMethodArgumentNotValidException 异常。

示例代码

以下是一个完整的 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"
}

此时,响应结果会返回校验失败的错误信息。若请求体中的数据通过校验,响应结果则为“用户创建成功”。