springBoot 怎么自定义hibernate-validator 验证注解

代码描述:

自定义注解

@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;
    }

上面代码,没有效果!!

阅读 5.2k
1 个回答

方法参数级别的校验
1.注册一个Bean,org.springframework.validation.beanvalidation.MethodValidationPostProcessor
2.在需要校验的类上加上@Validated注解
3.自定义全局异常处理器处理异常,即implements HandlerExceptionResolver

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题