代码描述:
自定义注解
@Target({ElementType.METHOD, ElementType.FIELD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = DigitsInArrayValidator.class)
public @interface DigitsInArray {
int [] array() default {-1,1};
String message() default "您的数据不合法";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
注解验证实现类
public class DigitsInArrayValidator implements ConstraintValidator<DigitsInArray,Integer> {
private String message;
private int [] array;
@Override
public void initialize(DigitsInArray digitsInArray) {
this.message = digitsInArray.message();
this.array = digitsInArray.array();
System.out.println(this.array);
}
@Override
public boolean isValid(Integer digit, ConstraintValidatorContext constraintValidatorContext) {
if(!Objects.isNull(this.array)) {
for (int i : array) {
if(digit == i) {
return true;
}
}
constraintValidatorContext.disableDefaultConstraintViolation();
constraintValidatorContext.buildConstraintViolationWithTemplate("值:"+ digit +"不合法").addConstraintViolation();
return false;
}
return false;
}
}
controller
@PutMapping("/status/{id}")
public Object updateProductionStatus(@PathVariable("id") String productionId, @RequestBody @DigitsInArray Integer status, BindingResult result) {
JSONObject jsonObject = new JSONObject();
String error = ValidateResultPush.validateHasError(result);
if(!StringUtils.isEmpty(error)) {
jsonObject.put("code",HttpEnum.E_400.getCode());
jsonObject.put("msg",error);
return jsonObject;
}
productionService.updateProductionStatus(productionId,status);
jsonObject.put("code", HttpEnum.OK.getCode());
jsonObject.put("msg",HttpEnum.OK.getMsg());
return jsonObject;
}
上面代码,没有效果!!
方法参数级别的校验
1.注册一个Bean,org.springframework.validation.beanvalidation.MethodValidationPostProcessor
2.在需要校验的类上加上@Validated注解
3.自定义全局异常处理器处理异常,即implements HandlerExceptionResolver