簡體   English   中英

帶有其他對象列表的Spring Web服務請求和響應映射

[英]Spring web service request and response for mapping having list of other objects

我正在使用Spring Web服務,在我的控制器中,我正在使用@RequestBody和@ResponseBody。 現在,根據我的理解,這些注釋可以將輸入的請求轉換為您指定的類對象。 但是,如果我的類對象引用了其他類對象該怎么辦。 就像是:

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



}

如何將其映射?

但是,如果我的類對象引用了其他類對象該怎么辦。

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

您的Question類充當根JSON的模板。 因此,JSON對象將具有一個名為questionText的字段(將是一個JSON字符串)和一個名為options的字段,這將是一個帶有遵循Options模板的JSON對象的JSON數組。

因此,這

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

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

它必須看起來像

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

匹配您的Options類。


知道Spring使用Jackson,您可以相對輕松地進行測試

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"}]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM