jackson JSON Deserialization с корневым элементом

У меня вопрос с jacksonом, который, я думаю, должен быть прост в разрешении, но он убивает меня.

Предположим, у меня есть class POJO java, который выглядит так (предположим, что Getters и Setters для меня):

class User { private String name; private Integer age; } 

И я хочу десериализовать JSON, который похож на объект User:

 { "user": { "name":"Sam Smith", "age":1 } } 

jackson дает мне проблемы, потому что Пользователь не является объектом первого уровня в JSON. Я мог бы, очевидно, создать class UserWrapper, который имеет один объект User, а затем десериализовать его, но я знаю, что должно быть более элегантное решение.

Как мне это сделать?

edit: это решение работает только для jackson <2.0

Для вашего случая есть простое решение:

  • Вам необходимо аннотировать class модели с @JsonRootName(value = "user") ;
  • Вам нужно сконфигурировать свой картограф с помощью om.configure(Feature.UNWRAP_ROOT_VALUE, true); (как для 1.9) и om.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); (для версии 2).

Это оно!


 @JsonRootName(value = "user") public static class User { private String name; private Integer age; public String getName() { return name; } public void setName(final String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(final Integer age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } } ObjectMapper om = new ObjectMapper(); om.configure(Feature.UNWRAP_ROOT_VALUE, true); System.out.println(om.readValue("{ \"user\": { \"name\":\"Sam Smith\", \"age\":1 }}", User.class)); 

это напечатает:

 User [name=Sam Smith, age=1] 
  • Каков наилучший способ разобрать ответ JSON из библиотеки запросов?
  • Как я могу разобрать этот JSON в Android?
  • Самый быстрый способ конвертировать XML в JSON в Java
  • Как удалить определенный элемент из JSONArray?
  • Что такое «406-Не приемлемый ответ» в HTTP?
  • Автоматическая десериализация свойств C #
  • .NET NewtonSoft JSON десериализует карту для другого имени свойства
  • Формат даты Сопоставление с JSON Jackson
  • Конвертировать словарь в JSON в Swift
  • Как превратить объект C # в строку JSON в .NET?
  • JQuery getJSON заполняет выбор пункта меню
  • Давайте будем гением компьютера.