SpringMVC控制器接收JSON字符串时,报错HTTP-415

试了好长时间没有查出问题在哪

这是我的前端代码

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="/html/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
    function test() {
        var saveDataAry = [];
        var data1 = {"name" : "name1"};
        var data2 = {"name" : "name2"};
        saveDataAry.push(data1);
        saveDataAry.push(data2);
        $.ajax({
            type : "POST",
            url : "/jsonTest",
            dataType : "json",
            contentType : 'application/json',
            data : JSON.stringify(saveDataAry),
            success : function(data) {
                alert(data);
            },
            error : function(data) {
                alert("error");
            }
        });
    }
</script>
</head>
<body>
    <input type="button" onclick="test()" value="JSON">
</body>
</html>

这是我的后端代码

@Controller
public class JsonTest {
    @RequestMapping(value = "jsonTest", method = RequestMethod.POST)
    @ResponseBody
    public String jsonTest(@RequestBody List<Student> s) {
        return "success";
    }
}

class Student {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

浏览器提示我

POST http://localhost:8080/jsonTest 415 (Unsupported Media Type)

后台没有提示,打了个断点也没有进去

maven只依赖了spring-webmvc4.2.5和servlet-api3.1,SpringMVC本身是搭建成功的。
dispatcherservlet.xml里面是配置了<mvc:annotation-driven />

排查了有一段时间了:(
任何回复都能让我不胜感激

阅读 5.9k
4 个回答

我运行了你的代码,没有问题,我猜你应该没有加入 Jackson 的依赖和相关配置:

jackson 的依赖

消息转换器的配置:
消息转换器的配置

HttpMessageConverter没配吧。

可以加个jackson的依赖,然后MappingJacksonHttpMessageConverter塞到HttpMessageConverter位置上。

data : JSON.stringify(saveDataAry),这样的话传过去的是一个字符串是无法转换为 List 的,你可以修改 Controller 的参数为字符串或者将 data 改成{参数名:数组}

将 public String jsonTest(@RequestBody List<Student> s) { 中的 @requestBody 删除

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题