@ModelAttribute не имеет значения при использовании с @RequestParam

У меня есть класс контроллера, который имеет отображение ниже, и я пытаюсь вызвать это с помощью 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 );
    }
}); 

Он может определить длину ips, но job.getScanId() возвращает значение null. Но когда я предупреждаю в jsp, он печатает идентификаторы сканирования из моего объекта задания json.

Я не знаю, какую ошибку я делаю. Я думаю, что я прав в части контроллера, но я не знаю, правильно ли я передаю объект задания и массив строк. Любые указатели?


person Coder    schedule 18.12.2013    source источник
comment
Можете ли вы опубликовать свой класс Job и фактическое тело отправленного запроса?   -  person Sotirios Delimanolis    schedule 18.12.2013
comment
Вы публикуете JSON, а не параметры запроса. @ModelAttribute будет работать только с параметрами запроса, а не с JSON. Для JSON используйте @RequestBody   -  person M. Deinum    schedule 18.12.2013


Ответы (1)


Аннотация @ModelAttribute укажет Spring создать экземпляр аннотированного типа и заполнить его (установить его поля), используя параметры запроса в запросе. Если параметры не совпадают, он ничего не будет использовать, и его поля останутся null.

Вот что здесь происходит. Ваш клиент отправляет параметр запроса

job:job

то, что я предполагаю, не соответствует полям класса Job. Обратите внимание, что значение, которое вы передаете @ModelAttribute, т.е. "job" совершенно не связан с одноименным параметром запроса.

person Sotirios Delimanolis    schedule 18.12.2013