Spring Restful问题,长度为1的列表

时间:2012-09-04 12:19:19

标签: spring list rest

我们有一个json,它显示了一个对象列表,如下所示:

skillCheckAnswers: [
{
optionId: 6786,
optionText: "Copy constructor",
optionWeight: "1.00"
},
{
optionId: 6787,
optionText: "Friend constructor",
optionWeight: "2.00"
},
{
optionId: 6788,
optionText: "Default constructor",
optionWeight: "3.00"
},
{
optionId: 6789,
optionText: "Parameterized constructor",
optionWeight: "4.00"
}
]

只要列表中有多个对象,这是可以的。但如果列表只包含1个项目,则json显示:

{
optionId: 6785,
optionText: "Friend class",
optionWeight: "4.00"
}

请注意,第二个Json不是作为列表给出的,而是作为单个对象(缺少方括号[])。

有没有办法可以用方括号输出长度为1的列表?

Edit-- 我们可以使用foreach作为第一个JSON,但是如果对象的数量变为1,则foreach开始给出错误。为了处理这个,我们有一个if else循环来检查List的长度是1还是大于1.如果列表是然后我们将其作为单个obkect处理。这似乎是一个愚蠢的解决方案,我想有一个简单的方法。

有人能告诉我这是否可能吗?

2 个答案:

答案 0 :(得分:1)

您应该执行以下操作:

来自Spring控制器:

@RequestMapping(method = RequestMethod.GET, value = "/myquestions")
public @ResponseBody
List<Answer> generateQuestions() {

  List<Answer> answers = new ArrayList<Answer>();
  Answer ans1 = new Answer();
  ans1.setOptionId("6785");
  ans1.setOptionText("Friend class");
  ans1.setOptionWeight("4.00");
  answers.add(ans1);

  return answers;
}

输出如下:

[
   {
       "optionId": "6785",
       "optionText": "Friend class",
       "optionWeight": "4.00"
   }
]

到目前为止我明白了,你的问题与JSON转换器有关。我已经使用Spring MappingJacksonHttpMessageConverter消息转换器进行了测试。您可以查看有关如何配置JSON转换器的Spring文档。 http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch18s02.html

答案 1 :(得分:0)

你提到你使用Spring。 Spring不会自动为您提供的restful API提供JSON转换。你可以把这样的东西放在你的conext文件中:

您可以使用org.springframework.http.converter.json.MappingJacksonHttpMessageConverter并在上下文文件中进行设置,为您进行JSON转换。

然后你可以使用Spring MVC的@ResponseBody注释来提供一个宁静的服务,不得不对JSON响应进行手动编码。