【发布时间】:2014-01-27 15:53:21
【问题描述】:
我正在尝试使用@ModelAttribute,但我似乎无法通过这个 400(错误请求)。我看过大量的 SO 帖子,但似乎没有一个能解决我所看到的问题。
以下是我尝试过的一些事情:
- 对函数的参数重新排序
- 模型属性上没有 ("someForm") 参数
- 以 html 表单而不是 spring 表单的形式提交
在将其放在 SO 上之前,我已尝试将其简化到最低限度,但似乎仍然无法让它消失。有什么想法吗?
这里是控制器
@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;
});
更新 1; 根据 cmets,我尝试了以下方法;
$("#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;
});
更新 2:
有人问我str 正在返回什么。
"itemId=aa"
【问题讨论】:
-
模型属性是从请求参数反序列化的,但您似乎在发布 JSON。
-
请求参数还是 JSON?选一个。对于请求参数,请保留 .serialize() 并删除 dataType: 'json'。对于 JSON,请使用 JS 库,例如 JSON3 + Spring MVC @RequestBody + Jackson 库
-
所以我尝试使用 ajax 调用修改剥离 JSON 数据类型和 json 应用程序类型仍然抛出 400。
-
@SotiriosDelimanolis
str正在返回"contentItemId=aa" -
您的处理程序方法也期待
someId。你好像没有发送那个。将@RequestParam属性视为required=false。
标签: jquery ajax spring jsp spring-mvc