2013-05-21 46 views
2

假設我有兩種不同類型的JSON定義在下面,我需要將它們映射到同一類型的Java對象。Jersey/JAXB將不同的JSON格式綁定到單個類型的java對象

類型一個

{ 
"startDate": "2013-05-10", 
"endDate": "2013-05-19", 
"value": "1.5" 
} 

類型

{ 
"startDate": "2013-05-10", 
"endDate": "2013-05-19", 
"data": "1.5" 
} 

我想用針織/傑克遜兩者映射到一個Java類:

@XmlRootElement 
public class DataPoint{ 

    public String startDate; 
    public String endDate; 
    public String value; //What do I do here??? 
} 

基本上是datavalue應視爲等同。現在使用Jersey/Jackson自動完成到DataPoint的轉換,我該如何定製此用例? 我正在使用Jersey客戶端API。

回答

1

您只需要在您的POJO中映射JSON的2個setter。

public class TestPojo 
{ 
    String startDate; 
    String endDate; 
    String content; 
//Default Constructor. 
//Getter and Setter for startDate and endDate 


    public void setValue(String content) 
    { 
     this.content = content; 
    } 


    public void setData(String content) 
    { 
     this.content = content; 
    } 

} 

我的測試:

 String s = "{\"startDate\": \"2013-05-10\",\"endDate\": \"2013-05-19\",\"value\": \"value1.5\"}"; 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
     TestPojo pojo = mapper.readValue(s, TestPojo.class); 
     System.out.println(pojo); 
     s = "{\"startDate\": \"2013-05-10\",\"endDate\": \"2013-05-19\",\"data\": \"data1.5\"}"; 

     mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
     pojo = mapper.readValue(s, TestPojo.class); 
     System.out.println(pojo); 

輸出:

TestPojo [startDate=2013-05-10, endDate=2013-05-19, content=value1.5] 
TestPojo [startDate=2013-05-10, endDate=2013-05-19, content=data1.5] 
相關問題