Как сопоставить поля JSON с пользовательскими свойствами объекта?

120
10

У меня есть простейшее сообщение json с некоторыми полями и хочу сопоставить его с объектом java с помощью spring-web.


Проблема: поля моих целевых классов называются иначе, чем int he json response. Как я могу каким-либо образом сопоставить их с объектом без переименования полей в java?


Есть ли какая-то аннотация, которую можно разместить здесь?


{
"message":"ok"
}

public class JsonEntity {
//how to map the "message" json to this property?
private String value;
}

RestTemplate rest = new RestTemplate();
rest.getForObject(url, JsonEntity.class);

спросил(а) 2015-04-20T14:13:00+03:00 5 лет, 5 месяцев назад
1
Решение
119

Чтобы сопоставить свойство JSON для объекта java с другим именем, используйте @аннотацию JsonProperty, и ваш код будет:

public class JsonEntity {
@JsonProperty(value="message")
private String value;
}

ответил(а) 2015-04-20T14:22:00+03:00 5 лет, 5 месяцев назад
70

Попробуйте следующее:

@JsonProperty("message")
private String value;

ответил(а) 2015-04-20T14:21:00+03:00 5 лет, 5 месяцев назад
58

В случае, если вы его знаете, вы также можете использовать аннотации Jaxb для маршала /unmarshal json, используя Jackson


@XmlRootElement
public class JsonEntity {
@XmlElement(name = "message")
private String value;
}

Но вы должны инициализировать свой контекст Джексона. Вот пример, как инициализировать контекст Джексона с аннотациями Jaxb.


ObjectMapper mapper = new ObjectMapper();

AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
mapper.getDeserializationConfig().setAnnotationIntrospector(introspector);
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);

ответил(а) 2015-04-20T14:38:00+03:00 5 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема