Я использую 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.
Кто-нибудь знает, как это сделать или если это возможно?
Вы пытались использовать @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; }
}
@JsonProperty(value="label")
и он не работал, я попробовал, как вы предложили, и это работает! спасибо человек, это действительно поможет упростить код сейчас.
Помните, что в Jackson 1.x и com.fasterxml.jackson.annotation.JsonProperty
в Jackson 2.x есть org.codehaus.jackson.annotate.JsonProperty
. Проверьте, какой ObjectMapper вы используете (из какой версии), и убедитесь, что используете правильную аннотацию.
org.json4s.jackson
. :) и, возможно, другая реализация jackson
YMMV.
Есть еще одна опция для переименования поля:
Полезно, если вы имеете дело со сторонними классами, которые вы не можете комментировать, или просто не хотите загрязнять класс специальными аннотациями Джексона.