使用@RequestParam时@ModelAttribute没有值

时间:2013-12-18 04:15:45

标签: jquery spring modelattribute

我有一个控制器类,它具有下面的映射,我试图用ajax调用它。

@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 );
    }
}); 

能够pring ips长度,但job.getScanId()返回null。但是当我在jsp中发出警报时,它会从我的json作业对象中打印出扫描ID。

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

1 个答案:

答案 0 :(得分:0)

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

这就是这里发生的事情。您的客户端正在发送请求参数

job:job
我认为

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