【问题标题】:Ignore fields only in json but not xml with jackson-dataformat-xml仅在 json 中忽略字段,但在使用 jackson-dataformat-xml 时不忽略 xml
【发布时间】:2014-04-07 03:45:17
【问题描述】:

Jacksonjackson-dataformat-xml 模块一起使用,我可以将POJO 序列化为JSONXML。我的对象中有一些字段(xml 属性)应该只序列化为XML,而不是JSON。如果我应用@JsonIgnore 注释,即使使用@JsonXMLProperty,该字段也会被完全忽略。

如何仅忽略 JSON 而不是 XML 中的字段?

【问题讨论】:

    标签: java json jackson json-serialization jackson-modules


    【解决方案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>
    

    【讨论】:

    • 是否有任何注解只能在 XML 中忽略?
    • @Thirumal,不,但你可以使用MixIn
    猜你喜欢
    • 2021-06-22
    • 2017-10-01
    • 2016-11-21
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    相关资源
    最近更新 更多