"No serializer found for class play.data.Form"-助手 class 表单绑定异常
"No serializer found for class play.data.Form"-Exception on helper class form binding
我有一个继承结构,其中 SubtaskGroupA 和 SubtaskGroupB 都继承自 @MappedSuperclass 子任务,并允许用户提交一个组的多个子任务。我使用带有字段列表子任务的助手 class SubtaskList。呈现此助手 class 的表单,用户将在所有子任务中输入信息(使用 scala 的 @select-helper)并提交表单。
使用 Form<SubtaskList> form = form(SubtaskList.class).bindFromRequest();
绑定输入时,我收到以下异常:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class play.data.Form and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: java.util.ArrayList[0]->models.qosdatamodel.SubtaskGroupA["form"])
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:59) ~[jackson-databind-2.3.3.jar:2.3.3]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:26) ~[jackson-databind-2.3.3.jar:2.3.3]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:541) ~[jackson-databind-2.3.3.jar:2.3.3]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:644) ~[jackson-databind-2.3.3.jar:2.3.3]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152) ~[jackson-databind-2.3.3.jar:2.3.3]
所有字段都是 public getters/setters 的私有字段。
在所有 SubtaskGroupA 的列表上调用 toJson 时出现相同的异常。
感谢所有帮助。
编辑: @JsonIgnore 注释有点帮助,我猜,但现在我在 bindFromRequest() 上收到一个不同的异常:
Caused by: org.springframework.beans.NullValueInNestedPathException: Invalid property 'subtasks' of bean class [models.qosdatamodel.SubtaskList]: Could not instantiate property type [models.qosdatamodel.Subtask] to auto-grow nested property path: java.lang.InstantiationException
at org.springframework.beans.BeanWrapperImpl.newValue(BeanWrapperImpl.java:651) ~[spring-beans-4.0.3.RELEASE.jar:4.0.3.RELEASE]
at org.springframework.beans.BeanWrapperImpl.growCollectionIfNecessary(BeanWrapperImpl.java:885) ~[spring-beans-4.0.3.RELEASE.jar:4.0.3.RELEASE]
at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:790) ~[spring-beans-4.0.3.RELEASE.jar:4.0.3.RELEASE]
at org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:571) ~[spring-beans-4.0.3.RELEASE.jar:4.0.3.RELEASE]
at org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:548) ~[spring-beans-4.0.3.RELEASE.jar:4.0.3.RELEASE]
`
我认为您的模型存在问题models.qosdatamodel.SubtaskGroupA
。
您无法从此 class 访问某些字段。
为了避免这个问题,你必须找到导致问题的字段(你会在日志中找到它)并添加注释 @JsonIgnore
我不确定以上 class SubtaskGroupA
是否正确,但我确定这就是问题所在。
可能您正试图通过您的模型 class 制作 json,而错误来自您的关系之一 :)
编辑
SubtaskList - 在这个 class 中你可能遇到了问题 :)
我有一个继承结构,其中 SubtaskGroupA 和 SubtaskGroupB 都继承自 @MappedSuperclass 子任务,并允许用户提交一个组的多个子任务。我使用带有字段列表子任务的助手 class SubtaskList。呈现此助手 class 的表单,用户将在所有子任务中输入信息(使用 scala 的 @select-helper)并提交表单。
使用 Form<SubtaskList> form = form(SubtaskList.class).bindFromRequest();
绑定输入时,我收到以下异常:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class play.data.Form and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: java.util.ArrayList[0]->models.qosdatamodel.SubtaskGroupA["form"])
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:59) ~[jackson-databind-2.3.3.jar:2.3.3]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:26) ~[jackson-databind-2.3.3.jar:2.3.3]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:541) ~[jackson-databind-2.3.3.jar:2.3.3]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:644) ~[jackson-databind-2.3.3.jar:2.3.3]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152) ~[jackson-databind-2.3.3.jar:2.3.3]
所有字段都是 public getters/setters 的私有字段。 在所有 SubtaskGroupA 的列表上调用 toJson 时出现相同的异常。
感谢所有帮助。
编辑: @JsonIgnore 注释有点帮助,我猜,但现在我在 bindFromRequest() 上收到一个不同的异常:
Caused by: org.springframework.beans.NullValueInNestedPathException: Invalid property 'subtasks' of bean class [models.qosdatamodel.SubtaskList]: Could not instantiate property type [models.qosdatamodel.Subtask] to auto-grow nested property path: java.lang.InstantiationException
at org.springframework.beans.BeanWrapperImpl.newValue(BeanWrapperImpl.java:651) ~[spring-beans-4.0.3.RELEASE.jar:4.0.3.RELEASE]
at org.springframework.beans.BeanWrapperImpl.growCollectionIfNecessary(BeanWrapperImpl.java:885) ~[spring-beans-4.0.3.RELEASE.jar:4.0.3.RELEASE]
at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:790) ~[spring-beans-4.0.3.RELEASE.jar:4.0.3.RELEASE]
at org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:571) ~[spring-beans-4.0.3.RELEASE.jar:4.0.3.RELEASE]
at org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:548) ~[spring-beans-4.0.3.RELEASE.jar:4.0.3.RELEASE]
`
我认为您的模型存在问题models.qosdatamodel.SubtaskGroupA
。
您无法从此 class 访问某些字段。
为了避免这个问题,你必须找到导致问题的字段(你会在日志中找到它)并添加注释 @JsonIgnore
我不确定以上 class SubtaskGroupA
是否正确,但我确定这就是问题所在。
可能您正试图通过您的模型 class 制作 json,而错误来自您的关系之一 :)
编辑 SubtaskList - 在这个 class 中你可能遇到了问题 :)