【问题标题】:Spring - @RequestBody blocks the requests?Spring - @RequestBody 阻止请求?
【发布时间】:2013-07-15 07:05:36
【问题描述】:

我是 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 发送到与java bean 匹配的controller

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

【问题讨论】:

  • 你的 json 不正确,需要有 person : 在开始
  • 感谢您的回复。我需要改变什么?
  • 类路径中有jackson库吗,服务器中的异常是什么
  • 是的。没有例外。

标签: java json spring jquery spring-mvc


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您的代码中有多个错误。我假设您正在使用这种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);
          }
      });
      

      【讨论】:

        【解决方案4】:

        不要对您的数据使用 JSON.stringify。您应该使用普通的 javascript 对象。然后,如果还是不行,看日志,可能你的 json 模型和你的 java bean 不匹配。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-08-29
              • 2014-04-01
              • 2022-11-21
              • 1970-01-01
              • 2020-10-30
              • 2014-11-09
              相关资源
              最近更新 更多