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

Deolin
  • 44

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

这是我的前端代码

<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 />

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

回复
阅读 4.7k
4 个回答

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

jackson 的依赖

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

HttpMessageConverter没配吧。

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

拿客_三产
  • 2.6k

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

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

宣传栏