【发布时间】:2018-12-15 02:02:20
【问题描述】:
我有两节课
@Data
@NoArgsConstructor
public class SearchProductOffer {
@Valid
private List<MatchProperty> properties = new ArrayList<>();
}
@Data
@NoArgsConstructor
public class MatchProperty {
private String version;
private String sourceSystem;
@NotNull(message = "Версия должна быть заполнена!")
public String codeName;
}
当我使用 ValidationUtil.invokeValidator 验证 A 时,我得到了
2018-07-06 16:04:09.769 错误 10223 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] :Servlet.service() for 带有路径 [] 的上下文中的 servlet [dispatcherServlet] 引发异常 [请求处理失败;嵌套异常是 java.lang.IllegalStateException:JSR-303 验证的属性 'properties[1].codeName' 没有对应的访问器 Spring 数据绑定 - 检查 DataBinder 的配置(bean 属性与直接字段访问)] 根本原因
org.springframework.beans.NotReadablePropertyException: 无效 bean 类 [java.lang.String] 的属性“properties [1]”:Bean 属性 'properties[1]' 不可读或具有无效的 getter method:getter的返回类型是否与参数类型匹配 二传手?在 org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue(AbstractNestablePropertyAccessor.java:622) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
当 fieldB 为空时。这两个类都有getter/setter。 Spring Boot 2.0.3.RELEASE
更新 我每次都会遇到异常,而我想在内部类中使用@NotNull(字段值为空)或@NotEmpty(我的字段为“”)字段进行验证。
【问题讨论】:
-
getter 和 setter 是公开的吗?
-
错误信息似乎与您的代码无关。发布重现问题的真实代码,以及真实完整的异常堆栈跟踪。
-
我使用 lombok @Data 并且在 *.class 文件中我看到了 getter 和 setter
-
我会说问题不在于验证,而在于您的 HTML 中的路径不正确。看起来您在路径中的某处使用了
properties[1]。请贴出你使用的JSP -
我使用 jackson objectMapper 从 json 获取对象。反序列化后,我得到正常的 java 对象,并且某些字段具有空值。使用@NotNull (codeName) 注释的空值字段。我调用 SmartValidator.validate 然后我得到异常。我验证了完全有效的 java 对象,SmartValidator.validate 必须从 codeName 字段创建 FieldError,但它抛出异常
标签: java spring bean-validation