【问题标题】:Jackson XML custom field deserializerJackson XML 自定义字段反序列化器
【发布时间】:2016-02-12 13:25:29
【问题描述】:

在使用 Jackson 进行 JSON 处理时,我扩展了 JsonDeserializer<T> 并能够处理自定义反序列化。与 Jackson 处理 XML 是否有类似的东西?

import java.util.List;

public class Something {

    private int iinteger;

    private String sstring;

    private List<String> sarray;

    public Something(int iinteger, String sstring, List<String> sarray) {
        this.iinteger = iinteger;
        this.sstring = sstring;
        this.sarray = sarray;
    }

    public Shit() {
    }

    public int getIinteger() {
        return iinteger;
    }

    public void setIinteger(int iinteger) {
        this.iinteger = iinteger;
    }

    public String getSstring() {
        return sstring;
    }

    public void setSstring(String sstring) {
        this.sstring = sstring;
    }

    public List<String> getSarray() {
        return sarray;
    }

    public void setSarray(List<String> dumb) {
        this.sarray = dumb;
    }
}

我想反序列化

<?xml version="1.0"?>
<Something xmlns="">
    <iinteger>23</iinteger>
    <sstring>hey</sstring>
    <sarray >abc abd abv</sarray >
</Something>

【问题讨论】:

  • 相当广泛!告诉我们更多关于你的代码等等......
  • 如果我的answer 解决了您的问题,请接受。

标签: java xml jackson


【解决方案1】:

除了 JSON,Jackson 还有de/serializes from/to XML

您需要以下依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.6.3</version>
</dependency>

除了standard Jackson annotations 和可选的JAXB annotations (javax.xml.bind.annotation),Jackson 还提供了一些XML-specific annotations

以下面的 POJO 为例:

public class Simple {
    public int x = 1;
    public int y = 2;
}

您可以使用以下方法将其序列化为 XML:

ObjectMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(new Simple());

结果是:

<Simple>
    <x>1</x>
    <y>2</y>
</Simple>

反序列化:

ObjectMapper xmlMapper = new XmlMapper();
Simple value = xmlMapper.readValue("<Simple><x>1</x><y>2</y></Simple>", Simple.class);

【讨论】:

  • 您还可以使用自定义序列化程序。 XML 输出存在一些限制,这使得编写自定义处理程序更具挑战性,因此首选使用注释和配置,但对于简单的输出,编写适用于 XML 格式的自定义序列化程序就足够容易了。
【解决方案2】:

是的,有JAXB

Intro to JAXB

参考实现称为Project Kenai。 它是 Metro(JAX-WS 参考实现)的一部分,但可以独立使用。

【讨论】:

    猜你喜欢
    • 2018-03-06
    • 2021-06-17
    • 1970-01-01
    • 2016-02-13
    • 2011-04-12
    • 2020-05-27
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    相关资源
    最近更新 更多