首页 > 解决方案 > SpringBoot 验证简单域类的@RequestBody 参数

问题描述

我有一个域类:

@Data
@AllArgsConstructor
class Person {
    Integer age;
    String gender;
}

我有以下控制器:

@RestController
class PersonController {
    @PostMapping("/person")
    public String testMethod(@RequestBody Person person) {
        return "Valid";
    }
}

现在我使用以下正文执行 API POST /person :

{
    "age": "12",
    "gender": "Q"
}

所以这成功返回字符串Valid

如何在 SpringBoot 中添加验证,以便:

  1. age 只接受整数值。
  2. 性别只接受字符串值 - M 或 F

标签: spring-boot

解决方案


您可以javax.validation.*在域模型对象上使用注释。

public class Person {

   @Min(value = 18, message = "Age should not be less than 18")
   @Max(value = 100, message = "Age should not be greater than 100")
   private int age;

   private Gender gender;
}

public enum Gender {
  M, F
}

...
@RestController
class PersonController {
    @PostMapping("/person")
    public String testMethod(@Valid @RequestBody Person person) {
        return "Valid";
    }
}

请注意,虽然可以使用 java bean 验证包中的注释来解决“性别”,但我提出了一种基于枚举的替代解决方案,因为它更具表现力并且也可以回答这个问题。

阅读有关该功能的介绍性教程


推荐阅读