假设我在下面定义了 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。
最佳答案
你只需要在你的 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]
关于java - Jersey/JAXB 将不同的 JSON 格式绑定(bind)到单一类型的 java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16679840/