我正在使用Spring启动Web服务,@ requestbody.While将JSON转换为Java Object抛出错误消息为“问题反序列化'setterless'属性”
我的POJO是这样的。
filter
答案 0 :(得分:2)
班级test
不符合Java bean。字段_AdminRequestSet
的名称与getter getAdminRequestSet
不对应。 Jackson支持没有setter的序列化,但必须可以从json中的属性名映射到目标类中的字段。
例如我们有这个json:
{"adminRequestSet": [{"id":1},{"id":2}]}
杰克逊能够在班级getAdminRequestSet
中找到getter test
,它对应于json中的属性adminRequestSet
。但是课程setAdminRequestSet
中没有设置adminRequestSet
且没有字段test
。
现在你有不同的选择。这里列出了常见的解决方案:
选项1:
将字段_AdminRequestSet
重命名为adminRequestSet
(以便类测试符合java bean)
选项2: 使用annotation指定字段的属性名称
@JsonProperty("adminRequestSet")
private List<AdminRequest> _AdminRequestSet;
选项3:
如果您无法更改课程test
,则可以使用Jackson MixIns
abstract class testMixIn {
@JsonProperty("adminRequestSet")
private List<AdminRequest> _AdminRequestSet;
}
//register testMixin for class test
objMapper.addMixIn(test.class, testMixIn.class);
答案 1 :(得分:0)
选项4:。删除不必要的吸气剂/设置剂。
考虑这种情况:
@JsonProperty("data")
private List<AdminRequest> _AdminRequestSet;
public List<AdminRequest> getAdminRequestSet()
{
return _AdminRequestSet;
}
问题在于,Jackson尝试匹配成员adminRequestSet上的getter / setter模式,但找不到数据成员。因此是例外。
您需要考虑两件事:
您是否真的需要getAdminRequestSet()方法?如果是这样,请使用@JsonIgnore对其进行注释。让@JsonProperty(“ data”)将列表生成为“ data”。
搜索用法以确定是否需要getXXX()方法。如果不需要,请将其删除。您甚至不必使用@JsonIgnore进行注释。