使用Ajax将json对象传递给Spring mvc控制器

时间:2015-02-08 09:54:39

标签: java jquery json spring spring-mvc

我正在尝试将简单的JSON对象传递给Spring MVC控制器,并将错误称为“NetworkError:415 Unsupported Media Type - https://my_url.html

我使用的是Spring 3.2.10,jquery 1.6和com.googlecode.json-simple 1.1.1库。关注我发布我的代码,

JSP

function myTestFunction(year){
        $.ajax({
            type: "POST",                
            url: "my_url.html",
            data: "{\"testName\": \"MyName\"}",
            contentType: "application/json",
            mimeType: "application/json",
            success: function(response){
                console.log("SUCCESS: " + response);
            },
            error: function (e) {
                console.log("Error " + e);
            }
        });

控制器类

 @RequestMapping(value = "/my_url.html", method = RequestMethod.POST)
    public void myTestMethod(@RequestBody MyInfo myInfo, HttpServletRequest request, HttpServletResponse response) throws Exception{
// my code
 }

MyInfo类

    public class MyInfo {    
        private String testName;

        public MyInfo () {
        }   

        public MyInfo (String testName) {
            this.testName = testName;
        }

        public String getTestName() {
            return testName;
        }

        public void setTestName(String testName) {
            this.testName = testName;
        }
}

我尝试了多个选项,添加dataType: 'json'并使用JSON.stringify发送对象但是对我不起作用。 而且我已经将“<mvc:annotation-driven />”标记放在我的spring配置文件中。我错过了什么或做错了什么?

2 个答案:

答案 0 :(得分:1)

您的请求和映射都没问题。

当转换器尝试将HTTP请求转换为JAVA对象时,可能会出现您提到的错误。您提到您使用的是 json-simple 库。 Spring MVC期望类路径上的 jackson 库,所以这很可能是你的问题。

尝试将jackson库添加到项目中。如果使用maven,对于spring 3.2,以下应该是一个正确的依赖,如果你使用不同的构建系统,只需从maven存储库下载,还要检查传递依赖(你会注意到它们列在maven文件中) jar档案)

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

答案 1 :(得分:0)

尝试使用JSON.stringify。 ajax调用看起来像

function myTestFunction(year){

    $.ajax({
        type: "POST",                
        url: "my_url.html",
        data: JSON.stringify({"testName": "MyName"}),
        contentType: "application/json",
        mimeType: "application/json",
        success: function(response){
            console.log("SUCCESS: " + response);
        },
        error: function (e) {
            console.log("Error " + e);
        }
    });