我有一个Spring–JSON / RestAPI,它使用注释驱动的输入验证. @有效
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定义,因为它会有太多无用的噪音IMO.
我不想/不能轻易地将getter或setter添加到我的DTO中,那么我该如何关注该错误消息并将我的DataBinder配置为使用“直接字段访问”?我想使用JavaConfig(@Configuration).
使用以下依赖项:
编辑:
控制器:
@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;
}
最佳答案
我偶然发现了同样的问题并为我们找到了解决方案,并且只想分享它.
在Resource或@ControllerAdvice中,您可以将Spring DataBinder配置为使用直接字段访问.
@ControllerAdvice
public class CustomControllerAdvice {
@InitBinder
private void activateDirectFieldAccess(DataBinder dataBinder) {
dataBinder.initDirectFieldAccess();
}
...
}
原文地址:https://www.jb51.cc/spring/431922.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。