Джексон: как лечить {тип: хх}? - PullRequest
3 голосов
/ 13 июня 2011

У меня есть следующий 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;

со всеми геттерами и сеттерами и т. Д.

Приведенный выше 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

Что-то вроде понятно.

Как я могу сказать Джексону, что встроенный 'resourceWithType' на самом деле является классом для десериализации?

Другим вариантом было бы сказать, что отказ от включения этого типа - как?

Ответы [ 2 ]

3 голосов
/ 13 июня 2011

Модель дерева возможно;или просто простую обертку вроде:

class {
    public ResourceWithType resourceWithType;
}

, чтобы вы могли ее развернуть.Но часто сам фреймворк должен обрабатывать развертывание, так как они добавляют дополнительную упаковку (по умолчанию Джексон не добавляет туда resourceWithType).

2 голосов
/ 13 июня 2011

Возможно использовать API TreeModel , чтобы развернуть первый уровень (имя тега), а затем десериализовать внутреннее содержимое как обычно (используя API привязки)?

...