2

我是新手Spring。根据我之前在 google 中的搜索,我们可以使用@RequestBodyJSON将数据发送到,并且我们可以在控制器中获取数据。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

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

4

6 回答 6

2

您的类路径中需要 jackson-mapper-asl。如果您使用 maven,请将其添加到您的 pom 中:

<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-mapper-asl</artifactId>
  <version>1.9.12</version>
</dependency>
于 2013-07-15T07:29:31.223 回答
1

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

于 2013-08-01T12:46:29.557 回答
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。而不是 contextPath,您可以只使用 url 而无需开始斜杠。还缺少逗号和错误的引号。这是更正后的版本:

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);
    }
});
于 2013-08-01T14:26:00.573 回答
0

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

于 2013-07-15T07:14:58.933 回答
0

内容类型不应该是“应用程序/json”而不是“应用程序/表单编码”。你有没有试过改变它。奇怪的是你没有得到任何服务器端异常。你得到什么回应?

于 2013-07-16T00:23:02.950 回答
0

如果没有看到您的 Person 和 Persons 对象,很难说。你可以打开spring的调试。我觉得很有帮助。从我的 log4j 配置

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

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

于 2013-08-06T01:09:14.973 回答