2017-04-14 20 views
0

私はジャクソンを使ってXMLをシリアライズする方法を学んでいます。私のクラス構造は以下の通りです。ジャクソンを使用した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; 
    } 
} 

私はジャクソンを使用してXMLへのクラスをシリアル化しようとすると、私は<city>

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(); 
     } 
    } 

のための2つのタグを取得します。これは、私が取得出力されます。

<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> 

なぜ都市に2つのタグがあり、どのように修正できるのか理解できますか?

私は、あなたが都市のリストを持って、出力のようなものであることを

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

これが重複していることを教えてください。私はすでにその投稿をチェックしています。私のコードを修正して動作させる方法に関する提案はありますか? – Anit

+0

@JacksonXmlElementWrapper(useWrapping = false)を使用すると、タグごとにタグが囲まれていることがわかります。代わりに、すべてのcityNamesを囲むタグが1つだけ必要です – Anit

答えて

1

をしたいと思います。ジャクソンは、リスト自体とリストのメンバーの両方に「都市」を使用しています。ローカル名を 'cities'に変更すると、結果がより良くなることがあります。

残念ながら、これは正しい答えではありません。むしろ、正解はhttps://stackoverflow.com/a/27144625/131433です。

+0

"localName = cities"が変更されましたが、それでも同様の出力が得られました。 – Anit

+0

SETATTR SFO SJC海は、私は同様に、変数名を変更する必要がありますか? – Anit

関連する問題