2013-12-18 160 views
0

我有一个控制器类,它具有下面的映射,我试图用ajax调用它。@ModelAttribute与@RequestParam一起使用时没有任何价值

@RequestMapping(value = "/jobs", method = RequestMethod.POST, headers = "Accept=*/*") 
@ResponseBody 
public String associate(@ModelAttribute ("job") Job job, @RequestParam(value="ips") String[] ips) { 
    logger.debug("associate: No of IP Ranges: {} ", ips.length); 
    logger.debug("associate: jobSchedule: {} " , job.getScanId()); 
} 

的Jquery Ajax调用如下:

$.ajax({ 
    type: 'POST', 
    url: urlstr, 
    data : {job:job ,ips: ipIds.toString()} 
    success: function(data, textStatus, jqXHR) { 
     if(data != ""){ 
      if(data != ""){ 
       alert(data); 
       location = ctx + '/rest/settings'; 
      } 
     } 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     alert('There was an error in scheduling.' + errorThrown); 
    } 
}); 

它能够普林IPS长度,但job.getScanId()返回null。但是当我在jsp中提醒时,它会从我的json作业对象中打印出扫描id。

我不知道我在做什么错误。我认为我是正确的控制器部分,但我不知道我是否正确传递作业对象和字符串数组。任何指针?

+0

你可以发布你的'作业'类和发送的请求的实际正文? –

+0

您正在发布JSON不请求参数。 '@ ModelAttribute'只能用于不是JSON的请求参数。对于JSON,使用'@ RequestBody' –

回答

0

@ModelAttribute注解将指示Spring创建注释类型的实例并使用请求中的请求参数填充它(设置其字段)。如果不匹配参数,则不会使用任何参数,其字段将保持为null

这就是发生在这里。你的客户端发送一个请求参数

job:job 

,我认为不适合Job类的字段。请注意,您传递给@ModelAttribute的值,即。 "job"与同名的请求参数完全无关。

相关问题