我有这样的模型课:
import org.codehaus.jackson.map.*;
public class MyPojo {
int id;
public int getId()
{ return this.id; }
public void setId(int id)
{ this.id = id; }
}
并且json json的格式如下:
{
"root":{
"MyPojo":{
"id":4
}
}
}
我通过注解@JsonTypeInfo
或@JsonRoot
来了解解决方案,但是由于我从图书馆学到了此类,所以我无法应用它。
我也阅读了有关这样的解决方案:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
但是我不能使用它,因为:
1.该设置适用于所有班级,但现在我只需要更改1个班级的行为
2.它将检查根密钥是否与类名(在我的情况下为mypojo
)相对,但对我来说不是真的。
有什么想法吗?
答案 0 :(得分:0)
此处的方法是添加自定义解串器。您可以在那里编程编程操作json以创建您的MyPojo
实例
public class MyPojoDeserializer extends StdDeserializer<MyPojo> {
@Override
public Item deserialize(JsonParser jp, DeserializationContext ctxt) {
JsonNode node = jp.getCodec().readTree(jp);
return new MyPojo(node.get("root").get("MyPojo").get("id").numberValue());
}
}
然后注册反序列化器
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(MyPojo.class, new MyPojoDeserializer());
mapper.registerModule(module);