我正在使用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"}]}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句