弹出ajax调用中的START_ARRAY标记

时间:2014-11-21 11:50:05

标签: java jquery json spring spring-mvc

我有一个JSON对象,如下所示:

[
    {
        "usernameid": [
            "2",
            "7"
        ],
        "phaseid": [
            "2",
            "7"
        ],
        "weekstartdate": "2014-11-02"
    }
]

我尝试在控制器中的POJO中映射此JSON:

public ModelAndView approveTimesheet(@RequestBody ApproveTimesheet timesheet,HttpSession session) 
{
  logger.info("yes");
}

我的AJAX电话:

$.ajax({
  type : 'post',
  url : 'PendingTimesheet',
  contentType : "application/json; charset=utf-8",
  data : JSON.stringify(jsonObj),       
  success : function(data) {
  },            
});

POJO课程:

public class ApproveTimesheet 
{
  private String[] usernameid;
  private String[] phaseid;
  private String weekstartdate;
  //Getters and Setters
}

我收到以下异常

out of START_ARRAY token
 at [Source: org.apache.catalina.connector.CoyoteInputStream@7097326d; line: 1, column: 1]

如何在Spring控制器中正确映射上述JSON请求? 任何想法将不胜感激。

1 个答案:

答案 0 :(得分:0)

您发送的是 JSON 对象的数组,而不是单个对象。

然后,您的控制器签名应在Collection注释前面ArrayApproveTimesheet @RequestBody。 (我建议使用数组来避免泛型类型不匹配):

public ModelAndView approveTimesheet(
    @RequestBody ApproveTimesheet[] timesheets,
    HttpSession session) 
{
  for(int i = 0; i < timesheets.length; i++)
  {
    logger.info(timesheets[i]);
  }
  //...
}