2017-06-26 16 views
0

私はjsonペイロードとxmlペイロードを持っています。両方のペイロードを1つのPOJOクラスにマッピングしたいと思います。一方のエンドポイントはjsonを返し、もう一方のエンドポイントはxmlを返します。私は両方を1つのpojoクラスに結合できますか?@XmlElementと@JsonPropertyの両方をPOJOクラス内で使用できますか

{ 
    "house": 'big', 
    "has-large-house": "yes" 
} 

<completed-houses> 
..... 
</completed-houses> 
public PayloadResponse(
     @JsonProperty("house") final String house, 
     @JsonProperty("has-large-house") final String hasLargeHouseList, 
     @XmlElement(name="completed-houses") final String completeHouses) { 
    this.house = house; 
    this.hasLargeHouseList = hasLargeHouseList; 
    this.completeHouses = completeHouses; 
} 

、次いでゲッターおよびこれらのプロパティのセッター。

+0

*これ*有効なJSONファイルではありません、それは有効なXMLファイルではないので、何のパーサが存在しませんそれはそれを受け入れるでしょう。つまり、Javaでそれを行う方法についてのあなたの質問は、間違いです。 – Andreas

+0

それは意味をなさない。これは有効なJSONではありません。これは有効なXMLではありません。 –

+0

更新された質問は意味をなさない。 JSONとXMLには同じ値が含まれていないので(XMLに値がないなど)、なぜそれらを単一のクラスにマッピングすると思われますか? – Andreas

答えて

0

はい! JacksonとJAXBの注釈を同じPOJOで、Jackson module for JAXB annotationsを使用してジャクソンがJAXB注釈を理解できるようにし、jackson-dataformat-xmlをXMLにシリアライズすることができます。ここで

例です。

import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.dataformat.xml.XmlMapper; 
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule; 
import lombok.Data; 
import lombok.NoArgsConstructor; 

import javax.xml.bind.annotation.XmlElement; 
import java.io.IOException; 
import java.io.StringWriter; 

@Data 
@NoArgsConstructor 
public class PayloadResponse { 
    private String house; 

    @JsonProperty("has-large-house") 
    private boolean largeHouse; 

    @XmlElement(name = "completed-houses") 
    private String completedHouses; 

    public static void main(String[] args) throws IOException { 
     ObjectMapper xmlMapper = new XmlMapper(); 
     JaxbAnnotationModule module = new JaxbAnnotationModule(); 
     xmlMapper.registerModule(module); 

     PayloadResponse response = new PayloadResponse(); 
     response.setHouse("The White House"); 
     response.setLargeHouse(true); 
     response.setCompletedHouses("1600 Pennsylvania Ave."); 

     StringWriter stringWriter = new StringWriter(); 

     // Serialize value as XML. 
     xmlMapper.writeValue(stringWriter, response); 
     System.out.println("XML=" + stringWriter); 

     // Serialize value as JSON. 
     ObjectMapper jsonMapper = new ObjectMapper(); 
     stringWriter.getBuffer().setLength(0); 
     jsonMapper.writeValue(stringWriter, response); 
     System.out.println("JSON=" + stringWriter); 
    } 
} 

出力以下:

XML=<PayloadResponse><house>The White House</house><has-large-house>true</has-large-house><completed-houses>1600 Pennsylvania Ave.</completed-houses></PayloadResponse> 
JSON={"house":"The White House","completedHouses":"1600 Pennsylvania Ave.","has-large-house":true} 
関連する問題