У меня есть класс контроллера, который имеет ниже отображения, и я пытаюсь назвать это с помощью 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.
Я не знаю, какую ошибку я делаю. Я думаю, что я прав в части контроллера, но я не знаю, правильно ли передаю объект задания и строковый массив. Любые указатели?
@ModelAttribute
будет указывать Spring, чтобы создать экземпляр аннотированного типа и заполнить его (установить его поля), используя параметры запроса в запросе. Если параметры не совпадают, они не будут использоваться, и его поля останутся null
.
Это то, что происходит здесь. Ваш клиент отправляет параметр запроса
job:job
что, я полагаю, не соответствует полям класса Job
. Обратите внимание, что значение, которое вы передаете в @ModelAttribute
, т.е. "job"
полностью не связано с параметром запроса с тем же именем.
Job
и фактическое тело отправленного запроса?@ModelAttribute
будет работать только с параметрами запроса, а не с JSON. Для JSON используйте@RequestBody