Spring Boot 校验对象中字段必传

在开发 Spring Boot 应用程序时,经常需要对请求中的数据进行校验,确保数据的完整性和正确性。特别是当我们处理对象时,往往需要确保某些字段是必填的。本文将介绍如何使用 Spring Boot 的注解校验功能来实现这一目的。

依赖配置

首先,确保在 pom.xml 文件中添加了对 Hibernate Validator 的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

创建实体类

接下来,我们需要定义一个实体类,使用 @NotNull@NotEmpty@NotBlank 等注解来标记必填字段。

import javax.validation.constraints.NotBlank;

public class User {

    @NotBlank(message = "用户名不能为空")
    private String username;

    @NotBlank(message = "密码不能为空")
    private String password;

    // Getter 和 Setter 方法
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

在上面的 User 类中,usernamepassword 字段被标记为必填,若传入空值,将抛出相应的校验异常。

类图

以下是该 User 类的 UML 类图:

classDiagram
    class User {
        +String username
        +String password
        +String getUsername()
        +void setUsername(String username)
        +String getPassword()
        +void setPassword(String password)
    }

创建控制器

然后,我们创建一个控制器来处理用户注册请求,并对请求体进一步进行校验。

import org.springframework.http.ResponseEntity;
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("/register")
    public ResponseEntity<String> register(@Valid @RequestBody User user) {
        // 处理注册逻辑
        return ResponseEntity.ok("注册成功");
    }
}

在控制器中,@Valid 注解用于触发对 User 对象的校验。若校验未通过,Spring Framework 会自动返回错误信息。

关系图

接下来展示 UserControllerUser 类之间的关系图:

erDiagram
    User {
        String username
        String password
    }
    UserController {
        register(User user)
    }
    UserController --|> User : validates

异常处理

如果我们想定制异常处理,可以创建一个全局异常处理器来捕获这些校验错误,以返回更用户友好的提示信息。

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(BindException.class)
    public ResponseEntity<String> handleBindException(BindException ex) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST)
                .body(ex.getBindingResult().getFieldError().getDefaultMessage());
    }
}

结论

通过使用 Spring Boot 的校验注解和全局异常处理,我们能够轻松确保请求对象的必传字段。在开发过程中,这种做法不仅减少了潜在的逻辑错误,也提高了用户体验。希望本文对你在使用 Spring Boot 进行数据校验时有所帮助,推动你的开发更加顺畅和高效。