Изменить имя поля в JSON с помощью 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 и id появится как value в формат JSON.

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

3 122

3 ответа:

вы пробовали использовать @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; }
}

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

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

Джексон Миксины.

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