簡體   English   中英

Spring-@RequestBody阻止了請求?

[英]Spring - @RequestBody blocks the requests?

我是Spring新手。 從我之前在google中的搜索說,我們可以使用@RequestBodyJSON數據發送到Spring Controller ,然后可以在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

希望我們的堆棧用戶能幫助我。

您需要在類路徑上使用jackson-mapper-asl。 如果您使用maven,請將其添加到pom:

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

請檢查與JSON數據匹配的Java bean類名稱。

您的代碼中有多個錯誤。 我假設您正在使用這種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);
    }
});

不要在數據上使用JSON.stringify。 您應該使用普通的javascript對象。 然后,如果仍然不起作用,請查看日志,也許您的json模型與您的Java bean不匹配。

內容類型不應為“應用程序/ json”,而應為“應用程序/表單編碼”。 您是否嘗試過更改它。 奇怪的是您沒有任何服務器端異常。 您得到什么回應?

看不見您的Person和Persons對象很難說。 您可以打開spring的調試。 我覺得這很有幫助。 從我的log4j配置

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

我還將檢查Firebug或Chrome開發者工具是否將正確的有效負載發送到服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM