1

我们有一个 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 个对象就可以了。但如果列表仅包含 1 项,则 json 显示:

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

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

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

编辑——我们可以将 foreach 用于第一个 JSON,但如果对象的数量变为 1,则 foreach 开始给出错误。为了处理这个问题,我们有一个 if else 循环来检查列表的长度是否为 1 或大于 1。如果列表很长,然后我们将其作为单个对象处理。这似乎是一个愚蠢的解决方案,我想会有一个简单的出路。

谁能告诉我这是否可能?

4

2 回答 2

1

您应该执行以下操作:

从弹簧控制器:

@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 消息转换器进行了测试。您可以查看 Spring 文档以了解如何配置 JSON 转换器。http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch18s02.html

于 2012-09-10T16:35:42.313 回答
0

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

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

然后,您可以使用 Spring MVC 的 @ResponseBody 注释来提供一个安静的服务,而不必手动编码 JSON 响应。

于 2012-09-04T12:38:16.850 回答