requestbody - responsebody json
Spring @ReponseBody @RequestBody con clase abstracta (1)
Acabo de encontrar la respuesta y aquí está el enlace de referencia.
Lo que he hecho es añadir un código encima de la clase abstracta.
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.*;
@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Cat.class, name = "cat"),
@JsonSubTypes.Type(value = Dog.class, name = "dog")
})
public abstract class Animal{}
Luego en la entrada json en HTML,
var inputjson = {
"type":"cat",
//blablabla
};
Después de enviar el json y finalmente en el controlador,
@RequestMapping(value = "/animal", method = RequestMethod.POST, produces = "application/json; charset=utf-8", consumes=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody insertanimal(@RequestBody Animal tmp) {
return tmp;
}
En este caso, la variable tmp se convierte automáticamente en un objeto Dog
o Cat
, dependiendo de la entrada json.
Supongamos que tengo tres clases.
public abstract class Animal {}
public class Cat extends Animal {}
public class Dog extends Animal {}
¿Puedo hacer algo como esto?
Entrada: un json que es perro o gato.
Salida: un perro / gato depende del tipo de objeto de entrada
No entiendo por qué el siguiente código no funciona. ¿O debo usar dos métodos separados para manejar nuevos perros y gatos?
@RequestMapping(value = "/animal", method = RequestMethod.POST, produces = "application/json; charset=utf-8")
private @ResponseBody <T extends Animal>T insertAnimal(@RequestBody T animal) {
return animal;
}
Actualización: sry me olvido de incluir el mensaje de error
HTTP Status 500 - Falló el procesamiento de la solicitud; la excepción anidada es java.lang.IllegalArgumentException: la variable de tipo ''T'' no se puede resolver