2017-11-14 1 views
1

Ich habe meine benutzerdefinierte Annotation und seine Constraint-Validator hinzugefügt, um Listeneingaben auf PersonForm zu validieren, aber wenn es darum geht, eine Ausnahme zu testen, löst es Datenbindung Meine Anfrage gesendet werfen ajax call + form.serialize();So verwenden Sie benutzerdefinierte Annotation auf Sammlertyp Ebene im Frühjahr mvc

PersonForm:

private Long id; 

@NotEmpty 
private String firstName; 

@NotEmpty 
private String lastName; 

@Email(message = "profile.email.email") 
private String email; 

private List<@ResourceConstraint String> resource; 

// all setters/getters .... 

Annotation

@Documented 
@Constraint(validatedBy = ResourceValidator.class) 
@Target({ElementType.TYPE_USE}) 
@Retention(RetentionPolicy.RUNTIME) 
@NotEmpty 
public @interface ResourceConstraint { 

    String message() default "resource not Valid"; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default {}; 
} 

Constraint Validator

public class ResourceValidator implements ConstraintValidator<ResourceConstraint, String> { 

    @Override 
    public boolean isValid(String value, ConstraintValidatorContext context) { 
     boolean result = false; 
      if(Enums.getIfPresent(Resource.class, value.toUpperCase()).isPresent()) { 
        result = true; 
      } 
     return result; 
    } 

} 

-Controller

@PostMapping(path = "/applay/profile/{id}", produces = "application/json;charset=UTF-8") 
public @ResponseBody JsonResponseBean applayProfile(@PathVariable Long id, @Valid PersonForm form, BindingResult result, Locale locale) throws BusinessException { 
    JsonResponseBean jsonResponse = new JsonResponseBean(); 
    Person current = new Person(); 

    if (!result.hasErrors()) { 
     ... 

    } else { 
     ... 
    } 

    return jsonResponse; 
} 

Ausnahme

java.lang.IllegalStateException: JSR-303 validated property 'resource[1].<list element>' does not have a corresponding accessor for Spring data binding - check your DataBinder's configuration (bean property versus direct field access) 
    at org.springframework.validation.beanvalidation.SpringValidatorAdapter.processConstraintViolations(SpringValidatorAdapter.java:162) 
    at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:117) 
    at org.springframework.validation.DataBinder.validate(DataBinder.java:891) 
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.validateIfApplicable(ModelAttributeMethodProcessor.java:168) 
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:115) 
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) 

Caused by: org.springframework.beans.NotReadablePropertyException: Invalid property 'resource[1].<list element>' of bean class [com.domain.project.forms.PersonForm]: Bean property 'resource[1].<list element>' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter? 
    at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue(AbstractNestablePropertyAccessor.java:633) 
    at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue(AbstractNestablePropertyAccessor.java:624) 
    at org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:99) 
    at org.springframework.validation.AbstractBindingResult.getRawFieldValue(AbstractBindingResult.java:283) 
    at org.springframework.validation.beanvalidation.SpringValidatorAdapter.getRejectedValue(SpringValidatorAdapter.java:268) 
    at org.springframework.validation.beanvalidation.SpringValidatorAdapter.processConstraintViolations(SpringValidatorAdapter.java:148) 
    ... 40 common frames omitted 

wie Recht, den benutzerdefinierten Validator Prozess Alle Getter und Setter von PersonForm zu binden, nach hibernate doc umgesetzt werden ich brauche nicht irgend etwas mehr als die Einschränkung

Abhängigkeiten (Gradle) Anwendung

compile group: 'javax.validation', name: 'validation-api', version: '2.0.0.Final' 
    compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.0.2.Final' 
... 
+0

Bitte helfen Sie mir, sie sagten [hier] (https://jira.spring.io/browse/SPR-15936) und [auch hier] (https://jira.spring.io/browse/ SPR-15916) dass das Problem gelöst ist, wie soll ich es tun (es ist etwas Neues für mich in diesem Stadium) – alveomaster

Antwort

0

ich habe es, um sich mit diesem Fehler zu

Upgrade loszuwerden
spring Version  = '5.0.1.RELEASE' 
hibernate Version = '5.2.12.Final' 

with 
compile group: 'javax.validation', name: 'validation-api', version: '2.0.0.Final' 
compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.0.4.Final' 
Verwandte Themen