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