2013-07-15 73 views
2

我是Spring的新用戶。從我以前的谷歌搜索說,我們可以發送JSON數據到Spring Controller使用@RequestBody我們可以在控制器中獲取數據。Spring - @RequestBody阻止請求?

但是,當我使用@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相匹配嗎?

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

+1

你的json是不正確的,需要有人:在開始 – NimChimpsky

+0

感謝您的答覆。我必須改變? –

+0

你在classpath中有jackson庫嗎,在服務器上是什麼意思 –

回答

1

請檢查您的java bean類名稱是否與JSON數據匹配。

0

請勿對您的數據使用JSON.stringify。你應該使用普通的javascript對象。然後,如果它仍然不起作用,請查看日誌,或許您的json模型與您的java bean不匹配。

2

您需要在classpath上使用jackson-mapper-asl。如果你用maven添加到您的POM:

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

我已經有這個。 –

0

不宜內容類型是「應用/ JSON」,而不是「應用程序/形式編碼」。你有沒有試過改變它。奇怪的是,你沒有得到任何服務器端的例外。你有什麼迴應?

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); 
    } 
}); 
0

很難說沒有看到您的Person和Persons對象。你可以打開春天的調試。我覺得它非常有幫助。從我的log4j的配置

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

我還要檢查在Firebug或您發送正確的有效載荷到服務器上的Chrome瀏覽器開發工具。