Spring - @RequestBody阻止请求?

时间:2013-07-15 07:05:37

标签: java json spring jquery spring-mvc

我是Spring的新手。从我之前在谷歌搜索中说,我们可以使用 @RequestBody JSON发送Spring Controller数据,我们可以在控制器中获取数据。

但是当我使用@RequestBody时,它不允许向控制器发出请求。

function sendJSON(){

    var jsonData = {"name":"XXX","age":"20","hobby":"TV"};
    /alert("json Data : \n\n\n"+jsonData);

    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: contexPath + "/sender.html",
        //dataType: "html",
        //contentType: "application/x-www-form-urlencoded; charset=utf-8",
        contentType: "application/json"
        data : JSON.stringify(jsonData),
        success: function(data, textStatus ){
            alert("success");
            $("#result").html(data.name+"data.age+" "+data.hobby);  
        },
        error: function(xhr, textStatus, errorThrown){
            //alert('request failed'+errorThrown);
        }
    });
}

我的controller将是,

@RequestMapping(value = "sender.html", method=RequestMethod.POST)
public @ResponseBody Person sendMessage(@RequestBody Persons person){
    System.out.println("Test..........");
    System.out.println(person.getName()+ " "+person.getAge()+" "+person.getHobby()+"\n");
    return persons; 
}

但是我的请求阻止了。

我是否将json data发送到与controller匹配的java bean

希望我们的堆栈用户能帮助我。

6 个答案:

答案 0 :(得分:2)

你的类路径上需要jackson-mapper-asl。如果您使用maven将此添加到您的pom:

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

答案 1 :(得分:1)

请检查与JSON数据匹配的java bean类名称。

答案 2 :(得分:1)

代码中有多个错误。我假设你正在使用这种Person

public class Person {
  private int age;
  private String hobby;
  private String name;
  /* omitted getters/setters */
}

您的代码有点不清楚您希望控制器返回什么 - 单个人或他们的列表。我把它改成了一个人:

  @RequestMapping(value = "sender.html", method = RequestMethod.POST)
  public @ResponseBody
  Person sendMessage(@RequestBody Person person) {
    System.out.println("Test..........");
    System.out.println(person.getName() + " " + person.getAge() + " " + person.getHobby() + "\n");
    return person;
  }

现在是javascript。您可以在不启动斜杠的情况下使用url而不是contextPath。还有缺少逗号和错误的引号。这是更正后的版本:

var jsonData = {
    "name" : "XXX",
    "age" : "20",
    "hobby" : "TV"
};

$.ajax({
    type : 'POST',
    dataType : 'json',
    url : "sender.html",
    contentType : "application/json",
    data : JSON.stringify(jsonData),
    success : function(data, textStatus) {
        alert("success");
        $("#result").html(data.name + data.age + data.hobby);
    }
});

答案 3 :(得分:0)

不要在数据上使用JSON.stringify。你应该使用普通的javascript对象。然后,如果它仍然不起作用,请查看日志,也许您的json模型与您的java bean不匹配。

答案 4 :(得分:0)

内容类型不应该是“application / json”而不是“application / form encoded”。你试过改变吗?奇怪的是,你没有得到任何服务器端异常。你得到了什么回应?

答案 5 :(得分:0)

如果没有看到你的人物和人物,很难说。你可以打开spring的调试。我发现它非常有用。从我的log4j配置

<logger name="org.springframework.web.servlet.mvc" >
    <level value="debug" />
</logger>

我还会检查您正在向服务器发送正确有效负载的Firebug或Chrome开发工具。