【问题标题】:Serialization of Object to XML using Jackson [duplicate]使用 Jackson 将对象序列化为 XML [重复]
【发布时间】:2017-09-10 05:56:22
【问题描述】:

我正在学习使用 Jackson 来序列化 XML。我的班级结构如下。

class City {
    @JacksonXmlProperty(localName = "CityName")
    String cityName;

    public City(String cityName) {
        this.cityName = cityName;
    }

    public String getcityName() {
        return cityName;
    }

    public void setcity(String cityName) {
        this.cityName = cityName;
    }
}

@JacksonXmlRootElement(localName = "Person")
class Person {
    @JacksonXmlProperty(localName = "name")
    private String name;

    @JacksonXmlProperty(localName = "age")
    private String age;

    @JacksonXmlProperty(localName = "city")
    private List<City> city;

    public Person() { }

    Person(String name, String age, List<City> city) {
        this.name = name;
        this.age = age;
        this.city = city;
    }

    public String getname() {
        return name;
    }

    public String getage() {
        return age;
    }

    public List<City> getcity() {
        return city;
    }

    public void setname(String name) {
        this.name = name;
    }

    public void setage(String age) {
        this.age = age;
    }

    public void setcity(List<City> city) {
        this.city = city;
    }
}

当我尝试使用 Jackson 将一个类序列化为 XML 时,我得到了 &lt;city&gt; 的两个标签

public class App
{
    public static void main( String[] args )
    {
        try {
            XmlMapper xmlMapper2 = new XmlMapper();
            Person p = new Person();
            City c1 = new City("abc");
            City c2 = new City("def");
            City c3 = new City("ghi");
            List<City> cityList = new ArrayList<City>();
            cityList.add(c1);
            cityList.add(c2);
            cityList.add(c3);
            p.setname("setattr");
            p.setage("55");
            p.setcity(cityList);
            xmlMapper2.enable(SerializationFeature.INDENT_OUTPUT);
            String respPerson = xmlMapper2.writeValueAsString(p);
            System.out.println(respPerson);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

这是我得到的输出。

<Person><name>setattr</name><age>55</age><city><city><CityName>sfo</CityName></city><city><CityName>sjc</CityName></city><city><CityName>sea</CityName></city></city></Person>

你能帮我理解为什么我会得到两个城市标签以及如何修复它吗?

我希望输出类似于,

<Person><name>setattr</name><age>55</age><city><CityName>sfo</CityName><CityName>sjc</CityName><CityName>sea</CityName></city></Person>

【问题讨论】:

  • 你能告诉我这是怎么复制的吗?我已经检查了那个帖子。关于如何修复代码以使其正常工作的任何建议?
  • 使用 @JacksonXmlElementWrapper(useWrapping = false),我仍然看到 标签被每个 标签包围。相反,我只想要一个围绕所有城市名称的 标签

标签: java xml jackson


【解决方案1】:

您有一个城市列表。 Jackson 对列表本身和列表成员都使用“城市”。如果您将本地名称更改为“城市”,您可能会更喜欢结果。

很遗憾,这不是正确的答案。相反,https://stackoverflow.com/a/27144625/131433 似乎提供了正确答案。

【讨论】:

  • 我更改了“localName = 城市”,但仍然得到类似的输出。 setattr55sfosjc城市>
  • 我也应该更改变量名吗?
猜你喜欢
  • 2018-01-27
  • 2020-04-11
  • 2013-01-20
  • 2021-09-19
  • 2013-01-27
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
相关资源
最近更新 更多