Игнорировать поля только в json, но не в xml с jackson-dataformat-xml

Используя Jackson с модулем jackson-dataformat-xml, я могу сериализовать POJO как в JSON, так и в XML. В моем объекте есть несколько полей (атрибуты xml), которые должны быть сериализованы только в XML, но не в JSON. Если я применяю аннотацию @JsonIgnore, поле полностью игнорируется даже с @JsonXMLProperty.

Как я могу игнорировать поля только в JSON, но не в XML?


person ltfishie    schedule 07.04.2014    source источник


Ответы (1)


Вам следует использовать функцию Mix-in. Например, предположим, что ваш класс POJO выглядит так:

class Pojo {

    private long id;
    private String xmlOnlyProperty;

    // getters, setters
}

Теперь вы можете определить аннотации для каждого свойства, используя Mix-in интерфейсы. Для JSON это выглядит так:

interface PojoJsonMixIn {

    @JsonIgnore
    String getXmlOnlyProperty();
}

Для XML это выглядит так:

interface PojoXmlMixIn {

    @JacksonXmlProperty(isAttribute = true)
    String getXmlOnlyProperty();
}

Наконец, пример использования функции Mix-in:

Pojo pojo = new Pojo();
pojo.setId(12);
pojo.setXmlOnlyProperty("XML attribute");

System.out.println("JSON");
ObjectMapper mapper = new ObjectMapper();
mapper.addMixInAnnotations(Pojo.class, PojoJsonMixIn.class);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(pojo));

System.out.println("XML");
ObjectMapper xmlMapper = new XmlMapper();
xmlMapper.addMixInAnnotations(Pojo.class, PojoXmlMixIn.class);
System.out.println(xmlMapper.writeValueAsString(pojo));

Выше программа печатает:

JSON
{
  "id" : 12
}
XML
<Pojo xmlns="" xmlOnlyProperty="XML attribute"><id>12</id></Pojo>
person Michał Ziober    schedule 07.04.2014
comment
Есть ли какие-либо аннотации, которые следует игнорировать только в XML? - person Thirumal; 25.03.2021
comment
@Thirumal, нет, но ты можешь использовать MixIn. - person Michał Ziober; 25.03.2021
comment
Хорошо, спасибо за быстрый ответ - person Thirumal; 26.03.2021