2

假设我在下面定义了 2 种不同类型的 JSON,我需要将它们都映射到相同类型的 Java 对象。

A

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

B

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

我想使用 Jersey/Jackson 将它们都映射到一个 Java 类:

@XmlRootElement
public class DataPoint{

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

本质上data应该value被认为是等效的。现在使用 Jersey/Jackson 自动完成到 DataPoint 的转换,我如何针对这个用例进行自定义?我正在使用 Jersey 客户端 API。

4

1 回答 1

1

您只需要在您的 POJO 中有 2 个从 JSON 映射的 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]
于 2013-05-23T06:02:22.933 回答