Spring Boot 如何做请求参数校验

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

Spring Boot 请求参数校验

Spring Boot 提供了多种方式来进行请求参数校验。通常这是通过javax.validation的注解以及Spring的@Valid@Validated来完成的。接下来,我们将详细介绍如何使用这些工具来校验请求参数。

使用 @Valid 注解

当你使用Spring MVC时,可以在Controller层使用@Valid注解来开启校验功能。

示例:

@PostMapping("/user")
public ResponseEntity<String> addUser(@Valid @RequestBody User user) {
    // 处理user
    return ResponseEntity.ok("User is valid");
}

支持的校验注解

这里是一些常用的javax.validation注解列表:

  • @NotNull:确保字段不是null

  • @NotEmpty:确保字段不是null或者空

  • @NotBlank:确保字段不是null、空或者空白字符

  • @Min(value):确保字段的值至少为value

  • @Max(value):确保字段的值最多为value

  • @Size(min=, max=):确保字段的值的大小在min和max之间

  • @Email:确保字段是一个电子邮件地址

  • @Pattern(regex=):确保字段匹配正则表达式

实体类中的使用:

public class User {
    @NotBlank(message = "Name is mandatory")
    private String name;
    
    @Email(message = "Email should be valid")
    private String email;
    
    // ... 其他字段和方法
}

使用 @Validated 注解

@Validated是Spring提供的另一个注解,它可以被用于方法级别的校验,并且可以定义校验组。

示例:

@Controller
public class UserController {

    @RequestMapping(value = "/user/save", method = RequestMethod.POST)
    public String saveUser(@Validated(User.Advanced.class) User user, BindingResult result) {
        if (result.hasErrors()) {
            // 处理错误
        }
        // ... 存储用户
        return "UserDetails";
    }
}

错误处理

当校验失败时,Spring会抛出MethodArgumentNotValidException,你可以在Controller中通过BindingResult来处理这些错误。

示例:

@PostMapping("/user")
public ResponseEntity<String> addUser(@Valid @RequestBody User user, BindingResult result) {
    if (result.hasErrors()) {
        String errorMsg = result.getAllErrors()
                                .stream()
                                .map(ObjectError::getDefaultMessage)
                                .collect(Collectors.joining(", "));
        return ResponseEntity.badRequest().body(errorMsg);
    }
    return ResponseEntity.ok("User is valid");
}

你还可以通过@ControllerAdvice来全局处理校验错误。

总结

Spring Boot通过集成javax.validation提供了功能强大且灵活的参数校验机制。你可以通过在字段上简单地添加注解,以及在Controller方法中使用@Valid@Validated注解来进行开箱即用的参数校验,并通过BindingResult或全局异常处理来管理错误信息。这不仅让你的应用更加安全,而且使得代码易于理解和维护。

最后更新于