Сериализация пустого списка путем игнорирования пустого элемента / свойства в fastXml Jackson java - PullRequest
0 голосов
/ 06 мая 2018

Когда я пытаюсь сериализовать класс, Джексон дает пустой список в виде списка с одним пустым элементом.

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

Вывод XML:

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

Выход Json:

{
    "users": null
}

Но я думаю, я должен получить пустой список, как показано ниже (без пустого пользовательского элемента внутри пользователей):

<response>
   <users/>
</response>

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Если вы используете одну и ту же модель для Hibernate/DB и Jackson/XML, вам необходимо загрузить соответствующий модуль Hibernate для правильной сериализации сохраненных коллекций. Для получения дополнительной информации см. jackson-datatype-hibernate .

0 голосов
/ 06 мая 2018

Просто возврат пустого списка из 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/>
...