Jquery 在ajax表单提交中使用@modelAttribute时出现错误400

Jquery 在ajax表单提交中使用@modelAttribute时出现错误400,jquery,ajax,spring,jsp,spring-mvc,Jquery,Ajax,Spring,Jsp,Spring Mvc,我正在尝试使用@modeldattribute,但我似乎无法通过这个400(错误请求)。我已经看了很多这样的帖子,但似乎没有一个能解决我所看到的问题 以下是我尝试过的几件事: 对函数上的参数重新排序 模型属性上没有(“someForm”)参数 将其作为html表单而不是spring表单提交 在穿上它之前,我试着把它简化到最低限度,但似乎仍然无法让它消失。有什么想法吗 这是控制器 @RequestMapping(value = "/r/save.spr", method = RequestMe

我正在尝试使用
@modeldattribute
,但我似乎无法通过这个400(错误请求)。我已经看了很多这样的帖子,但似乎没有一个能解决我所看到的问题

以下是我尝试过的几件事:

  • 对函数上的参数重新排序
  • 模型属性上没有(“someForm”)参数
  • 将其作为html表单而不是spring表单提交
在穿上它之前,我试着把它简化到最低限度,但似乎仍然无法让它消失。有什么想法吗

这是控制器

@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>
更新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;
});
更新2:

有人问我str返回了什么

"itemId=aa"

我看到了一些问题

首先,我建议您分析两层(客户端和服务器)上的请求/响应。例如,如果您的客户端是Chromium或FireFox等web浏览器,则这些浏览器上的开发人员工具会公开发送到服务器的请求和响应详细信息。在服务器端,我将使用java调试器并首先验证是否达到了您的方法。您需要确保映射/配置正确

一些详细信息。请在客户端验证url。我质疑是否需要查询字符串`?someId=${someId}?post请求不需要查询字符串

在服务器上,您的方法签名应为:

public String saveItem(@ModelAttribute StyleData styleData, 
      BindingResult bindingResult, Model model)
注意!您当前的返回类型为字符串(这很好),但返回的是null。如果需要硬编码值,请返回有效路径

最后一点提示。您还可以使用Curl模拟您的客户机请求;内容类型中的字符集=utf-8

希望有帮助。
请发布您的分析结果:)

发现这是因为我缺少URL上的应用程序上下文。我讨厌它只是在这上面扔了400而不是更有用的东西

模型属性是从请求参数反序列化的,但您似乎在发布JSON。请求参数还是JSON?挑一个。对于请求参数,保留.serialize()并删除数据类型:“json”。对于JSON,请使用JSON3+Spring MVC@RequestBody+Jackson library等JS库。因此,我尝试使用修改的ajax调用剥离JSON数据类型,JSON应用程序类型仍然抛出400。@SotiriosDelimanolis
str
正在返回
“contentItemId=aa”
您的处理程序方法也需要
someId
。你好像没发那个。请将
@RequestParam
属性视为
required=false
。无法访问该方法。OP从Spring的DispatcherServlet收到一个400。也许OP确实需要查询字符串。为什么方法签名应该是那样的?这是一个AJAX请求,可能OP不想返回响应体
null
在这种情况下是合适的。我之所以使用null,是因为我还没有完成实现,因为我甚至还没有进入该方法,在这一点上没有有效返回的意义。我还验证了ID是否已通过。您好,谢谢您的回复。您能否在post请求中发布web浏览器正在发送的内容。你能捕获数据吗。接下来在服务器上,为什么不添加一个简单的方法来响应“get”请求(无parms)。这将有助于验证您是否存在控制器配置或web.xml问题。使用web浏览器或Curl测试get请求。确保服务器路径正确。祝你好运,还有一个问题。“.spr”。那是哑剧类型吗?你需要它吗。它是在servlet配置中定义的吗?所以您的客户端向错误的url发出了请求?你能发布状态吗?现在关门了吗?问题回答:)代码有效?400个错误在SpringMVC中很棘手。它们似乎只在调试级别记录。
public String saveItem(@ModelAttribute StyleData styleData, 
      BindingResult bindingResult, Model model)