当我尝试序列化一个类时,杰克逊将空列表列为一个空元素列表。
....
@JacksonXmlElementWrapper(localName = "users")
@JacksonXmlProperty(localName = "user")
private List<User> users;
....
Xml输出:
<response>
<users>
<user/>
</users>
</response>
Json输出:
{
"users": null
}
但我想,我应该得到如下的空列表(用户内没有空用户元素):
<response>
<users/>
</response>
如何解决这个问题?
答案 0 :(得分:0)
只需从getUsers()
返回空列表即可获得所需的结果。
@JacksonXmlRootElement(localName = "response")
public class Response {
@JacksonXmlElementWrapper(localName = "users")
@JacksonXmlProperty(localName = "user")
private List<User> users;
public List<User> getUsers() {
if(null == users) {
return Collections.emptyList();
}
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
主要方法
ObjectMapper mapper = new XmlMapper();
Response response = new Response();
String s = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(response);
System.out.println(s);
response.setUsers(Arrays.asList(new User("1", "Hemant")));
s = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(response);
System.out.println(s);
输出
<response>
<users/>
</response>
<response>
<users>
<user>
<id>1</id>
<name>Hemant</name>
</user>
</users>
</response>
还有一件事,getUsers()
未改变
public List<User> getUsers() {
/*if(null == users) {
return Collections.emptyList();
}*/
return users;
}
输出
<response/>
答案 1 :(得分:0)
如果对Hibernate/DB
和Jackson/XML
使用相同的模型,则需要加载适当的Hibernate模块以正确序列化持久化集合。有关详细信息,请参阅jackson-datatype-hibernate。