【问题标题】:Spring web service request and response for mapping having list of other objects用于映射具有其他对象列表的 Spring Web 服务请求和响应
【发布时间】:2014-03-05 01:51:38
【问题描述】:

我正在使用 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;
    }



}

这将如何映射?

【问题讨论】:

  • 没有。选项不是枚举
  • 公共类选项 { 私有字符串选项; public String getOption() { 返回选项; } public void setOption(String option) { this.option = option; } }

标签: java spring spring-mvc


【解决方案1】:

但是,如果我的类对象引用了其他类怎么办 对象。

这绝对不是问题。 Spring 使用的 Jackson 可以提取该信息以生成适当的 JSON。

您的 Question 类充当根 JSON 的模板。因此 JSON 对象将有一个名为 questionText 的字段,它将是一个 JSON 字符串和一个名为 options 的字段,它将是一个 JSON 数组,其中包含遵循 Options 模板的 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"}]}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多