Изменить имя поля в JSON с помощью Jackson - PullRequest
149 голосов
/ 01 сентября 2011

Я использую Джексона, чтобы преобразовать мой объект в JSON.Объект имеет 2 поля:

@Entity
public class City {
   @id
   Long id;
   String name;
   public String getName() { return name; }
   public void setName(String name){ this.name = name; }
   public Long getId() { return id; }
   public void setName(Long id){ this.id = id; }
}

Так как я хочу использовать это с функцией автозаполнения jQuery, я хочу, чтобы 'id' отображался как 'значение' в json, а 'имя' отображалось как 'label».Документация Джексона не ясна по этому вопросу, и я попробовал каждую аннотацию, которая даже удаленно кажется, что она делает то, что мне нужно, но я не могу заставить name отображаться как label и id отображаться как value в json.

Кто-нибудь знает, как это сделать или это возможно?

Ответы [ 3 ]

289 голосов
/ 01 сентября 2011

Вы пытались использовать @JsonProperty?

@Entity
public class City {
   @id
   Long id;
   String name;

   @JsonProperty("label")
   public String getName() { return name; }

   public void setName(String name){ this.name = name; }

   @JsonProperty("value")
   public Long getId() { return id; }

   public void setId(Long id){ this.id = id; }
}
43 голосов
/ 28 августа 2015

Имейте в виду, что в Jackson 1.x есть org.codehaus.jackson.annotate.JsonProperty, а в Jackson 2.x - com.fasterxml.jackson.annotation.JsonProperty.Проверьте, какой ObjectMapper вы используете (из какой версии), и убедитесь, что вы используете правильную аннотацию.

9 голосов
/ 22 марта 2016

Существует еще одна опция для переименования поля:

Jackson MixIns .

Полезно, если вы имеете дело с классами третьих лиц, которых вы не можетеаннотировать , или вы просто не хотите загрязнять класс специальными аннотациями Джексона.

Документация Джексона для Mixins устарела, поэтому этот пример может дать больше ясности.По сути: вы создаете класс mixin, который выполняет сериализацию так, как вы хотите.Затем зарегистрируйте его в ObjectMapper:

objectMapper.addMixIn(ThirdParty.class, MyMixIn.class);
...