springboot 接口入参实体属性 注解限定取值,比如允许数字5和数字10
时间: 2024-03-23 16:40:49 浏览: 62
你可以使用 Spring 的 @Valid 注解结合自定义注解的方式来实现入参实体属性的取值限定。具体实现步骤如下:
1. 定义一个自定义注解,用于限定属性值的取值范围。比如:
```
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {AllowedValuesValidator.class})
public @interface AllowedValues {
String message() default "属性值不在允许的范围内";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
int[] value();
}
```
上面的自定义注解 `AllowedValues` 定义了 `value` 属性,表示允许的属性值。该注解还指定了一个 `AllowedValuesValidator` 类,用于校验属性值是否在允许的范围内。
2. 实现自定义注解的校验逻辑。比如:
```
public class AllowedValuesValidator implements ConstraintValidator<AllowedValues, Integer> {
private List<Integer> allowedValues;
@Override
public void initialize(AllowedValues constraintAnnotation) {
allowedValues = Arrays.stream(constraintAnnotation.value()).boxed().collect(Collectors.toList());
}
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
return allowedValues.contains(value);
}
}
```
上面的 `AllowedValuesValidator` 类实现了 `ConstraintValidator` 接口,用于校验属性值是否在允许的范围内。在 `initialize` 方法中,我们将允许的属性值转换成一个 List,以便在 `isValid` 方法中进行校验。
3. 在入参实体类中使用自定义注解。比如:
```
public class User {
@AllowedValues(value = {5, 10})
private Integer age;
// 其他属性和方法
}
```
上面的 `User` 类中,我们在 `age` 属性上使用了 `AllowedValues` 自定义注解,指定了允许的属性值为 5 和 10。
4. 在 Controller 中使用 @Valid 注解进行校验。比如:
```
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/add")
public Result addUser(@Valid @RequestBody User user) {
// 处理用户信息
}
}
```
上面的 Controller 中我们在 addUser 方法的入参中使用了 @Valid 注解,用于校验入参实体属性的取值。如果入参不符合校验规则,就会抛出 MethodArgumentNotValidException 异常,可以在异常处理器中进行统一处理。
阅读全文