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

0

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

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

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

  • 0
    Можете ли вы опубликовать свой класс Job и фактическое тело отправленного запроса?
  • 0
    Вы публикуете JSON, а не параметры запроса. @ModelAttribute будет работать только с параметрами запроса, а не с JSON. Для JSON используйте @RequestBody
Теги:
spring
modelattribute

1 ответ

0

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

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

job:job

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню