简体   繁体   English

通过忽略fastXml Jackson Java中的null元素/属性来序列化空列表

[英]Serialize empty List by ignoring null element/property in fasterXml Jackson java

When I am trying to serialize a class, Jackson giving empty list as list with one empty element. 当我尝试序列化一个类时,Jackson将空列表作为带有一个空元素的列表给出。

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

Xml Output: Xml输出:

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

Json Output: Json输出:

{
    "users": null
}

But I think, I should get empty list as below (without empty user element inside users): 但是我认为,我应该得到如下的空列表(用户内部没有空的用户元素):

<response>
   <users/>
</response>

How to fix this ? 如何解决呢?

Just returning empty list from getUsers() gives desired result. 只需从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;
    }
}

Main Method 主要方法

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);

Output 输出量

<response>
  <users/>
</response>

<response>
  <users>
    <user>
      <id>1</id>
      <name>Hemant</name>
    </user>
  </users>
</response>

One more thing, when getUsers() is unchanged 还有一件事,当getUsers()不变时

public List<User> getUsers() {  
    /*if(null == users) {
        return Collections.emptyList();
    }*/
    return users;
}

Output is 输出是

<response/>

If you use the same model for Hibernate/DB and Jackson/XML you need to load appropriate Hibernate module to properly serialize persisted collections. 如果您对Hibernate/DBJackson/XML使用相同的模型,则需要加载适当的Hibernate模块以正确地序列化持久化的集合。 For more information see jackson-datatype-hibernate . 有关更多信息,请参见jackson-datatype-hibernate

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM