通过忽略fastXml Jackson java

时间:2018-05-06 13:19:34

标签: java json xml jackson fasterxml

当我尝试序列化一个类时,杰克逊将空列表列为一个空元素列表。

....
@JacksonXmlElementWrapper(localName = "users")
@JacksonXmlProperty(localName = "user")
private List<User> users;
....

Xml输出:

<response>
   <users>
        <user/>
   </users>
</response>

Json输出:

{
    "users": null
}

但我想,我应该得到如下的空列表(用户内没有空用户元素):

<response>
   <users/>
</response>

如何解决这个问题?

2 个答案:

答案 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/DBJackson/XML使用相同的模型,则需要加载适当的Hibernate模块以正确序列化持久化集合。有关详细信息,请参阅jackson-datatype-hibernate