我是Spring
的新手。从我之前在谷歌搜索中说,我们可以使用 @RequestBody 向JSON
发送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
?
希望我们的堆栈用户能帮助我。
答案 0 :(得分:2)
你的类路径上需要jackson-mapper-asl。如果您使用maven将此添加到您的pom:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.12</version>
</dependency>
答案 1 :(得分:1)
请检查与JSON数据匹配的java bean类名称。
答案 2 :(得分: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。您可以在不启动斜杠的情况下使用url而不是contextPath。还有缺少逗号和错误的引号。这是更正后的版本:
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);
}
});
答案 3 :(得分:0)
不要在数据上使用JSON.stringify。你应该使用普通的javascript对象。然后,如果它仍然不起作用,请查看日志,也许您的json模型与您的java bean不匹配。
答案 4 :(得分:0)
内容类型不应该是“application / json”而不是“application / form encoded”。你试过改变吗?奇怪的是,你没有得到任何服务器端异常。你得到了什么回应?
答案 5 :(得分:0)
如果没有看到你的人物和人物,很难说。你可以打开spring的调试。我发现它非常有用。从我的log4j配置
<logger name="org.springframework.web.servlet.mvc" >
<level value="debug" />
</logger>
我还会检查您正在向服务器发送正确有效负载的Firebug或Chrome开发工具。