sirve responsebody requestbody que pathvariable para example json spring jackson abstract-class

requestbody - responsebody json



Spring @ReponseBody @RequestBody con clase abstracta (1)

enlace de referencia

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