2017-08-18 20 views
2

ObjectXMLに変換したいとします。私はcom.fasterxml.jackson.dataformat.xml.XmlMapperを使ってオブジェクトをXMLにシリアル化しますJacksonとオブジェクトをXMLにシリアル化する

私はjavax.xml.bind.annotation.*を使用して、クラスと変数に注釈を付けました。

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Transaction { 
    @XmlAttribute(required = true, name = "ch-full-name") 
    private String fullName; 
    @XmlAttribute(required = true, name = "ch-address") 
    private String address; 
    @XmlAttribute(required = true, name = "ch-city") 
    private String city; 
    @XmlAttribute(required = true, name = "ch-zip") 
    private String zipCode; 
    @XmlAttribute(required = true, name = "ch-country") 
    private String country; 
    @XmlAttribute(required = true, name = "ch-phone") 
    private String phone; 
    @XmlAttribute(required = true, name = "ch-email") 
    private String email; 

    ...getters; & setters; 
} 

値を代入し、シリアライズ:

Transaction tran = new Transaction(); 
tran.setFullName("full name"); 
tran.setAddress("address"); 
tran.setEmail("email"); 
tran.setCity("city"); 
tran.setCountry("country"); 
tran.setZipCode("zip"); 
tran.setPhone("phone"); 

XmlMapper mapper = new XmlMapper(); 
mapper.enable(SerializationFeature.INDENT_OUTPUT); 
String xml = "<?xml version='1.0' encoding='UTF-8'?>" + 
     mapper.writeValueAsString(tran); 

のでxml戻り、このような何か:

<?xml version="1.0" encoding="UTF-8"?> 
<Transaction> 
    <fullName>full name</fullName> 
    <address>address</address> 
    <city>city</city> 
    <zipCode>zip</zipCode> 
    <country>country</country> 
    <phone>phone</phone> 
    <email>email</email> 
</Transaction> 

をしかし、実際にこのようなことになっている:

<?xml version="1.0" encoding="UTF-8"?> 
<transaction> 
    <ch-full-name>full name</ch-full-name> 
    <ch-address>address</ch-address> 
    <ch-city>city</ch-city> 
    <ch-zip>zip</ch-zip> 
    <ch-country>country</ch-country> 
    <ch-phone>phone</ch-phone> 
    <ch-email>email</ch-email> 
</transaction> 

ありがとうございました。 xmlの属性名を設定する方法を教えてください。クラス名(Transactionの名前はtransaction)を含む名前を変更するにはどうすればよいですか?

答えて

1

ジャクソンを使用しているので、シリアル化中に変数に異なる名前を付けるには、@JsonProperty("name")を使用する必要があります。それはまたジャクソンの一部です。

@JsonProperty("ch-full-name") 
private String fullName; 
@JsonProperty("ch-address") 
private String address; 
@JsonProperty("ch-city") 
private String city; 
@JsonProperty("ch-zip") 
private String zipCode; 
@JsonProperty("ch-country") 
private String country; 
@JsonProperty("ch-phone") 
private String phone; 
@JsonProperty("ch-email") 
private String email; 
関連する問題