2014-11-27 17 views
14

Giả sử tôi có ba lớp.Spring @ReponseBody @RequestBody với lớp trừu tượng

public abstract class Animal {} 

public class Cat extends Animal {} 

public class Dog extends Animal {} 

Tôi có thể làm điều gì đó như thế này không?

Input: a json mà nó là chó hay mèo

Output: một con chó/mèo phụ thuộc vào loại đối tượng đầu vào

Tôi không hiểu tại sao các công việc mã doesnt sau. Hay tôi nên sử dụng hai phương pháp riêng biệt để xử lý chó và mèo mới?

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

Cập nhật: sry tôi quên bao gồm các thông báo lỗi

HTTP Status 500 - Yêu cầu xử lý thất bại; lồng nhau ngoại lệ là java.lang.IllegalArgumentException: Loại biến 'T' không thể được giải quyết

+2

Ý của bạn là gì với "mã không hoạt động". Lỗi runtime? Lỗi trình biên dịch? Nhật ký lỗi ở đâu? Bạn phải giúp chúng tôi hiểu vấn đề. Cảm ơn. –

Trả lời

24

ref link

Tôi chỉ tìm thấy câu trả lời bản thân mình và đây là link tham khảo.

Những gì tôi đã làm được thêm một số mã trên lớp trừu tượng

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

Sau đó, trong đầu vào json trong HTML,

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

Sau khi nộp json và cuối cùng trong bộ điều khiển,

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

Trong trường hợp này, biến tmp được tự động chuyển thành Dog hoặc Cat đối tượng, tùy thuộc vào đầu vào json.

+0

có cách nào để đặt một số chú thích trên Mèo hoặc Chó, mà không đặt '@ JsonSubTypes' lên động vật không? – dmitryvim

Các vấn đề liên quan