Изменить имя поля в JSON, используя Джексона

96

Я использую jackson для преобразования моего объекта в 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, а "name" - как "label". Документация Jackson на это не ясна, и я пробовал каждую аннотацию, которая даже отдаленно кажется, что она делает то, что мне нужно, но я не могу получить name для отображения в качестве label и id для отображения как value в json.

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

  • 0
    Если бы вы когда-нибудь собирались использовать объект («Город») для каких-либо других целей или бизнес-логики, я бы не стал определять его представление JSON как «Метка и значение». OTOH, если это чисто справочные данные, используемые для комбо, у вас, вероятно, будет больше - создание общего объекта (Pair или Option), чтобы охватить все это - возможный подход для рассмотрения.
Теги:
hibernate
jackson

3 ответа

202
Лучший ответ

Вы пытались использовать @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 setName(Long id){ this.id = id; }
}
  • 5
    Да, я пробовал это, однако я делал @JsonProperty(value="label") и он не работал, я попробовал, как вы предложили, и это работает! спасибо человек, это действительно поможет упростить код сейчас.
  • 0
    У меня аналогичное требование. Просто я использую Джексона с RESTEasy, и это не работает: - / Странно!
Показать ещё 3 комментария
27

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

  • 0
    Существует также пространство имен org.json4s.jackson . :) и, возможно, другая реализация jackson YMMV.
5

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

Jackson MixIns.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню