【问题标题】:Sending JSON object to Spring POST controller将 JSON 对象发送到 Spring POST 控制器
【发布时间】:2016-11-13 21:48:12
【问题描述】:

我正在尝试通过 AJAXJSON 对象发送到 Spring 控制器,但收到错误 415:

"The server refused this request because the request entity is in a format not supported by the requested resource for the requested method."

我的 Spring 控制器看起来像这样,并且在 Tomcat 7 上运行 -

@RequestMapping(
    value = "/ab/greeting", 
    method=RequestMethod.POST, headers = "Accept=*/*",
    produces = "application/json")
public String greetingSubmit(@RequestBody Person p1) {
    return "result";
}

Person 类是这样定义的 -

package ab;

public class Person {

    String fname;
    String lname;
} 

这是我的 javascript 调用 -

function getGreeting() {
        $.ajax({
            url : "/ab/greeting",
            contentType: "application/json",
            type: 'POST',
            async: false,
            data: JSON.stringify({ fname: "John", lname: "Doe" }),
            success: function (data) {
            }
        });
    }

这是我的 POM 中与 Jackson 相关的依赖项 -

<dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
        </dependency>

具有讽刺意味的是,当我在 Spring Boot 上尝试它时它就可以工作。

在 Tomcat 上,我还尝试使用 @ModelAttribute 代替 @RequestBody - 在这种情况下,请求返回 error code 200 但 p1 对象在控制器中为空。

这是否与 Spring 和 Spring MVC 的区别有关? - 为菜鸟问题道歉。我的控制器类仅使用@Controller 进行注释。

如何修改它以便能够将 JSON 对象从 AJAX 发送到 Spring POST 控制器?最后,我想发送一个包含 5 个对象的数组。

请帮忙。

谢谢

【问题讨论】:

  • 您可以尝试将 jquery ajax 邮政编码替换为 contentType: "application/json", data: JSON.stringify({ "fname": "John", "lname": "Doe" }) , cache: false, processData: false 也尝试在spring控制器中替换这个@RequestMapping(value = "/ab/greeting", method=RequestMethod.POST)
  • 可能是这个问题的重复:stackoverflow.com/questions/11492325/…
  • 感谢您的回复...我都试过了,但得到的结果和以前一样

标签: json ajax spring spring-mvc


【解决方案1】:

添加consumes属性

@RequestMapping(value = "/ab/greeting", method=RequestMethod.POST,headers = "Accept=*/*",produces = "application/json", consumes="application/json")
public String greetingSubmit(@RequestBody Person p1) {
    return "result";
}

【讨论】:

  • 感谢您的回复...我试过了,但得到的结果和以前一样
  • @lenniekid 你检查过post请求中的参数是否正确发送了吗?也许您可以尝试将数据更改为: data: { fname: "John", lname: "Doe" }
  • @lenniekid 如果您没有从前面的评论中获得足够的信息,请将下一个参数添加到您的方法“BindingResult 结果”中,然后您将能够提取有关该问题的更多信息
  • 当我使用 @RequestBody String p1 而不是 RequestBody Person p1 时它可以工作 - 知道为什么吗?非常感谢 - 感谢所有帮助。
  • 这是否意味着 Jackson 的转换存在问题?
【解决方案2】:

将来自您视图的数据写入 js 控制台并检查您的数据是否为空

【讨论】:

  • 这听起来像是评论,而不是答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
  • 2021-03-17
  • 2014-10-31
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
相关资源
最近更新 更多