私は以下のクラス構造を持っています。同じエンティティクラスからJSONとXMLを生成するには?
@XmlSeeAlso({Phone.class, Address.class})
abstract class ContactInfo {
}
@XmlRootElement(name="address")
class Address extends ContactInfo {
private String street;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
@XmlRootElement(name="phone")
class Phone extends ContactInfo {
private String mobile;
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}
class Contact {
private ContactInfo contact;
@XmlElementRef
public ContactInfo getContact() {
return contact;
}
public void setContact(ContactInfo contact) {
this.contact = contact;
}
}
@XmlRootElement(name="user")
class User {
private String name;
private Contact contact;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Contact getContact() {
return contact;
}
public void setContact(Contact contact) {
this.contact = contact;
}
}
これをJAXBを使用してXMLに変換すると、以下の構造が得られます。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<contact>
<phone>
<mobile>8971829749</mobile>
</phone>
</contact>
<name>Halley</name>
</user>
私のJSONは少し違って見えます。
{
"User" : {
"name" : "Halley",
"contact" : {
"contact" : {
"mobile" : "8971829749"
}
}
}
}
ルート要素ユーザーと電話機がサブJSON構造内に存在しません。
JAXBはXMLRootElementアノテーションを尊重していますが、Jacksonはそうではありません。なぜ、どのように私はこれを修正することができますか?
同じエンティティクラスからJSONとXMLを生成する必要があります。
追加プロパティなしでこれを行うことはできますか?私は、異なるサブクラスに異なるタグ名を付けることを望んでいます。 – Halley