0
Java:polymorphes désérialisation question Jackson
/**
*/
@JsonTypeInfo(include=As.PROPERTY, property="_type", use=Id.NAME)
@JsonSubTypes({
@JsonSubTypes.Type(value=Dog.class, name="dog"),
@JsonSubTypes.Type(value=Cat.class, name="cat"),
})
@ResourceName("animal");
public interface AnimalDto {
/**
* Stop gap property to deal with jackson not serializing type information
* when using {@link JsonTypeInfo}
*
* @return A string name of the type of Animal
*/
@JsonProperty("_type")
}
public abstract class WildAnimal implements AnimalDto {
private final String type;
@Override
public String getType(){
return this.type;
}
}
@JsonTypeName("dog")
public class Dog implements WildAnimal {
}
@JsonTypeName("cat")
public class Cat implements WildAnimal {
}
JSON:
{
"animal": {
"_type":"dog",
"id": "1",
}
}
Quand je suis en train de désérialiser réponse ci-dessus JSON java, jackson jette l'erreur ci-dessous. Quelqu'un peut-il m'aider s'il vous plaît à résoudre ce problème.
org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unexpected token (END_OBJECT), expected FIELD_NAME: missing property '_type' that is to contain type id (for class Animal)
at [Source: [email protected]fe3f; line: 1, column: 111]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (END_OBJECT), expected FIELD_NAME: missing property '_type' that is to contain type id (for class Animal)
at [Source: [email protected]fe3f; line: 1, column: 111]
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:228)
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.read(MappingJackson2HttpMessageConverter.java:220)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:95)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:795)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:779)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:559)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:512)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:454)