2014-11-27 4 views
14

Предположим, у меня есть три класса.Spring @ReponseBody @RequestBody с абстрактным классом

public abstract class Animal {} 

public class Cat extends Animal {} 

public class Dog extends Animal {} 

Могу ли я сделать что-то вроде этого?

Вход: JSON, который является собака или кошка

Выход: собака/кошка зависит от входного типа объекта

Я не понимаю, почему следующий код не работает. Или я должен использовать два отдельных метода для обработки новой собаки и кошки?

@RequestMapping(value = "/animal", method = RequestMethod.POST, produces = "application/json; charset=utf-8") 
private @ResponseBody <T extends Animal>T insertAnimal(@RequestBody T animal) { 
    return animal; 
} 

Update: SRY я забыл включить сообщение об ошибке

HTTP Status 500 - обработка запроса не удалось; вложенное исключение java.lang.IllegalArgumentException: Тип переменной «T» не может быть решена

+2

Что вы имеете в виду, «код не работает». Ошибка выполнения? Ошибка компилятора? Где журнал ошибок? Вы должны помочь нам понять проблему. Благодарю. –

ответ

24

ref link

Я только что нашел ответ сам, и вот ссылка ссылка.

То, что я сделал добавлен код выше абстрактного класса

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{} 

Тогда на входе JSON в HTML,

var inputjson = { 
    "type":"cat", 
    //blablabla 
}; 

После отправки JSON и, наконец, в контроллере,

@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; 
} 

В этом случае переменная tmp автоматически преобразуется в Dog или Cat объект, в зависимости от ввода json.

+0

- это какой-либо способ поставить аннотацию на Cat или Dog, не помещая '@ JsonSubTypes' на животных? – dmitryvim

Смежные вопросы