![](/img/trans.png)
[英]Should @RequestParam or @RequestBody be used for POST requests in Spring Boot?
[英]Spring - @RequestBody blocks the requests?
我是Spring
新手。 從我之前在google中的搜索說,我們可以使用@RequestBody將JSON
數據發送到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.