2013-12-18 101 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"與同名的請求參數完全無關。

相關問題