Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring使用自定义约束(如内置约束)在BindingError中设置字段错误的方法是什么?(NotNull,…)_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Spring使用自定义约束(如内置约束)在BindingError中设置字段错误的方法是什么?(NotNull,…)

Spring使用自定义约束(如内置约束)在BindingError中设置字段错误的方法是什么?(NotNull,…),spring,hibernate,spring-mvc,Spring,Hibernate,Spring Mvc,我正在实现自定义hibernate约束。但是BindingResult的结果在我的自定义约束和内置约束(如@NotNull)之间是不同的 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = AtLeastOneElementNotBlank.AtLeastOneElementNotBlankValidator.class) @Documented public @int

我正在实现自定义hibernate约束。但是BindingResult的结果在我的自定义约束和内置约束(如@NotNull)之间是不同的

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = AtLeastOneElementNotBlank.AtLeastOneElementNotBlankValidator.class)
@Documented
public @interface AtLeastOneElementNotBlank {
    String message() default "{org.hibernate.validator.constraints.NotBlank.message}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
    String[] fieldNames();   


    class AtLeastOneElementNotBlankValidator implements ConstraintValidator<AtLeastOneElementNotBlank, Object> {
        private String[] fieldNames;

        @Override
        public void initialize(AtLeastOneElementNotBlank constraintAnnotation) {
            this.fieldNames = constraintAnnotation.fieldNames();
        }

        @Override
        public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
            if (object == null) {
                return true;
            }

            try {
                for (String fieldName : fieldNames) {
                    Object property = PropertyUtils.getProperty(object, fieldName);

                    if (property != null && !property.toString().equals("")) {
                        return true;
                    }
                }

                return false;

            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
}
验证结果= org.springframework.validation.BeanPropertyBindingResult:1个错误 字段“searchKeyword”上的对象“searchParam”中存在字段错误:已拒绝 值[null];代码 [NotBlank.searchParam.searchKeyword,NotBlank.searchKeyword,NotBlank.java.lang.String,NotBlank]; 论据 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[searchParam.searchKeyword,searchKeyword];参数[];默认值 消息[搜索关键字]];默认消息[xxx]

验证结果= org.springframework.validation.BeanPropertyBindingResult:1个错误 对象“VAdCommonCode”中出错:代码 [AtLeastOneElementNotBlank.VAdCommonCode,AtLeastOneElementNotBlank]; 论据 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[VAdCommonCode.,];参数[];默认消息 [],[Ljava.lang.String;@5065f440];默认消息[xxx]

因此,此代码不提供任何自定义约束的错误信息

 List<ValidationError> validationErrors = new ArrayList<>();
        List<FieldError> fieldErrors = validationResult.getFieldErrors();
        for (FieldError fieldError : fieldErrors) {
            ValidationError validationError = new ValidationError();
            validationError.setValidationCode(fieldError.getCode());
            validationError.setErrorMessage(fieldError.getDefaultMessage());
            validationError.setParamName(fieldError.getField());
            validationError.setRejectedValue(fieldError.getRejectedValue());

            validationErrors.add(validationError);
        }

@Data
class ValidationError {
    private String validationCode;
    private String errorMessage;
    private String paramName;
    private Object rejectedValue;
}
List validationErrors=new ArrayList();
List fieldErrors=validationResult.getFieldErrors();
用于(FieldError FieldError:fieldErrors){
ValidationError ValidationError=新的ValidationError();
validationError.setValidationCode(fieldError.getCode());
validationError.setErrorMessage(fieldError.getDefaultMessage());
validationError.setParamName(fieldError.getField());
validationError.setRejectedValue(fieldError.getRejectedValue());
添加(validationError);
}
@资料
类验证错误{
私有字符串验证码;
私有字符串错误消息;
私有字符串参数名;
私有对象拒绝值;
}
Spring是否有一种方法可以通过自定义约束设置BindingError中的字段错误

 List<ValidationError> validationErrors = new ArrayList<>();
        List<FieldError> fieldErrors = validationResult.getFieldErrors();
        for (FieldError fieldError : fieldErrors) {
            ValidationError validationError = new ValidationError();
            validationError.setValidationCode(fieldError.getCode());
            validationError.setErrorMessage(fieldError.getDefaultMessage());
            validationError.setParamName(fieldError.getField());
            validationError.setRejectedValue(fieldError.getRejectedValue());

            validationErrors.add(validationError);
        }

@Data
class ValidationError {
    private String validationCode;
    private String errorMessage;
    private String paramName;
    private Object rejectedValue;
}