杰克逊:怎么治疗{type:xx}?

时间:2011-06-13 11:08:26

标签: json jackson resteasy

我有以下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不要包括那种类型 - 如何?

2 个答案:

答案 0 :(得分:3)

树模型是一种可能性;或者只是一个简单的包装:

class {
    public ResourceWithType resourceWithType;
}

让你解开它。但是框架本身通常应该处理解包,因为它们是添加额外包装的(杰克逊默认不添加'resourceWithType')。

答案 1 :(得分:2)

也许使用TreeModel API来解包第一个(标记名称)级别,然后像往常一样反序列化内部内容(使用绑定API)?