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

У меня есть простейшее сообщение 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);
3 ответа

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

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


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

@JsonProperty("message")
private String value;


В случае, если вы его знаете, вы также можете использовать аннотации 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);

licensed under cc by-sa 3.0 with attribution.