2014-03-05 57 views
0

我使用的是Spring Web服務,並在我的控制器中使用@RequestBody和@ResponseBody。現在根據我的理解,這些註釋會將傳入的請求轉換爲您指定的類對象。但是,如果我的類對象具有對其他類對象的引用呢?喜歡的東西:春天的Web服務請求和響應映射其他對象的列表

public class Question { 

    private String questionText; 

    List<Options> options; 

    public String getQuestionText() { 
     return questionText; 
    } 

    public void setQuestionText(String questionText) { 
     this.questionText = questionText; 
    } 

    //getters and setters for options 


} 

傳入的請求可以是這個樣子:

{"questionText":"sample question","options":{"option-0":"option0","option-1":"option1","option-2":"option2","option-3":"option3"}} 

選項看起來是這樣的:

public class Option { 

    private String option; 

    public String getOption() { 
     return option; 
    } 

    public void setOption(String option) { 
     this.option = option; 
    } 



} 

如何將這種映射?

+0

號選項不枚舉 – tsure

+0

公共類選項{ \t \t私人字符串選項; \t public String getOption(){ \t \t return option; \t} \t公共無效的SetOption(字符串選項){ \t \t this.option =選項; \t} } – tsure

回答

0

但是,如果我的類對象引用了其他類 對象會怎麼樣。

這絕對不是問題。 Jackson使用的Jackson可以提取該信息以生成適當的JSON。

您的Question類充當根JSON的模板。所以JSON對象將有一個名爲questionText的字段,它將是一個JSON字符串和一個名爲options的字段,它將是一個JSON數組,其中包含JSON對象,它遵循Options模板。

因此,這

"options":{"option-0":"option0","option-1":"option1","option-2":"option2","option-3":"option3"} 

是無效的。 options必須是JSON數組,且元素必須是JSON對象,而不是JSON字符串。

它必須看起來像

"options":[{"option":"option1"}, {"option":"option2"}] 

,以配合您Options類。


知道了Spring使用傑克遜,你可以測試這個相對容易

ObjectMapper mapper = new ObjectMapper(); 
Options o1 = new Options(); 
o1.setOption("option1"); 
Options o2 = new Options(); 
o2.setOption("option2"); 
Question question = new Question(); 
question.setOptions(Arrays.asList(o1, o2)); 
question.setQuestionText("sample question"); 
System.out.println(mapper.writeValueAsString(question)); 

產生

{"questionText":"sample question","options":[{"option":"option1"},{"option":"option2"}]}