我有以下POJO:
!
这是我的JSON:
public class POJO {
private final String id;
private final String name;
// constructor, getters omitted
}
我从代码中的其他位置获取{
"name":"foo"
}
值。
我想以某种方式将我的外部id
值与JSON结合起来,因此Jackson可以构建一个包含两个值的id
实例。
以下是一些示例代码:
POJO
如何告诉杰克逊设置public void deserialize() {
ObjectMapper om = new ObjectMapper();
String id = "123";
String json = "{\"name\":\"foo\"}";
POJO pojo = om.readValue(json, POJO.class);
System.out.println(pojo.getId());
System.out.println(pojo.getName());
}
值?
我已经发现我可以使用id
,然后将其投放到om.readTree(json)
然后ObjectNode
,然后创建put("id", id)
并致电om.readerFor(POJO.class)
。但我想杰克逊现在会做两次工作。
还有其他方法可以简单地注入一些外部属性吗?
答案 0 :(得分:0)
我认为我找到了正确的解决方案:
@JacksonInject
示例:
public class POJO {
@JacksonInject("id")
private final String id;
private final String name;
}
反序列化代码:
public void deserialize() {
ObjectMapper om = new ObjectMapper();
String id = "123";
String json = "{\"name\":\"foo\"}";
InjectableValues values = new InjectableValues.Std().addValue("id", id);
POJO pojo = om.reader(values).forType(POJO.class).readValue(json);
System.out.println(pojo.getId());
System.out.println(pojo.getName());
}
如果有更好/更快/更简单的解决方案,请随意添加其他答案:)