У меня есть Spring-JSON/RestAPI, которые используют проверку входных данных с помощью аннотаций. @Valid
Проверка доступности Spring Spring Spring для конфигурации свойств
При попытке проверить объект внутри другого объекта возникает следующая ошибка.
java.lang.IllegalStateException: JSR-303 validated property 'client.application' 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:153) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:108) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.validation.DataBinder.validate(DataBinder.java:866) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
...
Вот модель данных JSON, который используется здесь:
{ // @Valid MessageDTO
"title": "Test",
"message":"Test",
"client": { // @Valid ClientDTO
"application": "Test"
}
}
я пропускаю определение Java здесь, так как это было бы слишком много бесполезного шума ИМО.
Я не хочу/не могу легко добавить геттеры или сеттеры в свои DTO, так как я могу следовать этому сообщению об ошибке и настроить мой DataBinder для использования «прямого доступа к полям»? Я хотел бы использовать JavaConfig (@Configuration
) для этого.
Использование использовать следующие зависимости:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
EDIT:
Контроллер:
@RequestMapping(path = "/send", method = { RequestMethod.POST, RequestMethod.PUT })
public void send(@Valid @RequestBody MessageDTO message)
MessageDTO:
public class MessageDTO {
...
@Valid
@NotNull
public ClientDTO client;
}
ClientDTO:
public class ClientDTO {
...
@NotEmpty
public String application;
}
По крайней мере, поля должны быть общедоступными, не так ли? вы можете ановалировать поля? – Hasson
Я добавил некоторые из источников. Как вы можете видеть, они публичные. Если я удалю '@ Valid' из' MessageDTO # client', я не получу Exception, но он не будет также рекурсивно проверяться. –