Я пытаюсь использовать @ModelAttribute
, но я не могу пройти мимо этого 400 (неверный запрос). Я просмотрел тонну сообщений SO, но никто, кажется, не исправляет то, что я вижу.ошибка 400 при использовании @modelAttribute в представлении формы ajax
Вот несколько вещей, которые я пробовал:
- параметры переупорядочения на функции
- не имеющие («someForm») параметры по модели атрибуту
- направляющих его как HTML форма вместо пружинной формы
Я попытался упростить это до минимума до того, как положить его на СО, и все еще не могу заставить его уйти. Есть идеи?
Вот контроллер
@RequestMapping(value = "/r/save.spr", method = RequestMethod.POST)
public String saveItem(@RequestParam(value = "someId") UUID someId,
@ModelAttribute("thisForm") StyleData styleData,
BindingResult bindingResult) {
System.out.println();
return null;
}
Вот модель.
public class StyleData {
public String itemId;
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
Вот мой JSP
<form:form id="thisForm" modelAttribute="thisForm">
<input name="itemId"/>
</form:form>
Вот JS я использую, чтобы отправить форму.
$("#thisForm").submit(function() {
var str = $("#thisForm").serialize();
$.ajax({
type: "post",
data: str,
url: "/r/save.spr?someId=${someId}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function() {
console.log("here")
},
error: function(e){
debugger;
console.log("fail")
}
});
console.log("Here");
return false;
});
UPDATE 1; В комментариях я попробовал следующее;
$("#thisForm").submit(function() {
var str = $("#thisForm").serialize();
$.ajax({
type: "post",
data: str,
url: "/r/save.spr?someId=${someId}",
success: function() {
console.log("here")
},
error: function(e){
debugger;
console.log("fail")
}
});
console.log("Here");
return false;
});
Update 2:
меня спросили, что str
возвращается.
"itemId=aa"
Атрибуты модели десериализованы из параметров запроса, но вы, по-видимому, публикуете JSON. –
Параметры запроса или JSON? Выбери один. Для параметров запроса сохраните .serialize() и удалите dataType: 'json'. Для JSON используйте JS-библиотеку, такую как JSON3 + Spring MVC @RequestBody + Jackson library –
, поэтому я попытался с измененным вызовом ajax, удалив тип данных JSON и тип приложения json, все еще бросая 400. – zmanc