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'
...
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