我有以下json:
{"resourceWithType":
{"parentId":0,
"pluginId":0,
"pluginName":"Platforms",
"resourceId":10001,
"resourceName":"snert",
"typeId":10057,
"typeName":"Mac OS X"
}
}
和一个班级
public class ResourceWithType {
String resourceName;
int resourceId;
String typeName;
所有的getter和setter等等。
上述JSON实际上是通过RESTeasy和Jettison提供程序创建的,其中该类标有@XmlRootElement
。
当我尝试通过
反序列化上述JSON时ObjectMapper mapper=new ObjectMapper();
ResourceWithType rwt = mapper.readValue(json,ResourceWithType.class);
失败了
06-13 11:07:55.360: WARN/System.err(26040):
org.codehaus.jackson.map.exc.UnrecognizedPropertyException:
Unrecognized field "resourceWithType"
(Class org.rhq.core.domain.rest.ResourceWithType),
not marked as ignorable
这是可以理解的。
我怎么能告诉Jackson,嵌入的'resourceWithType'实际上是要反序列化的类?
其他选择是告诉jettison不要包括那种类型 - 如何?
答案 0 :(得分:3)
树模型是一种可能性;或者只是一个简单的包装:
class {
public ResourceWithType resourceWithType;
}
让你解开它。但是框架本身通常应该处理解包,因为它们是添加额外包装的(杰克逊默认不添加'resourceWithType')。
答案 1 :(得分:2)
也许使用TreeModel API来解包第一个(标记名称)级别,然后像往常一样反序列化内部内容(使用绑定API)?