我正在使用jQuery将数据发送到Spring MVC后端。我的Spring控制器方法如下所示:
@RequestMapping(value = "/add",method=RequestMethod.POST)
public @ResponseBody Response addAnsw(HttpServletRequest request, HttpServletResponse response) {
Response answer = new Response();
String name = request.getParameter("answer");
System.out.println(name);
return answer;
}
我的ajax方法是这样的:
function doAjaxPost() {
var search = {
answer : $("#currentanswer1").val()
}
alert(search.answer);
$.ajax({
type: 'POST',
url: 'add',
contentType : 'application/json; charset=utf-8',
data: JSON.stringify(search),
dataType : 'json',
success: function(data){
var json = "<h4>Ajax Response</h4><pre>"
+ JSON.stringify(data, null, 4) + "</pre>";
$('#info').html(json);
console.log("SUCCESS : ", data);
},
error: function(e){
$('#info').html("Sorry, there is something wrong with the data provided.");
alert('Error: ' + e);
}
});
}
问题是,答案是返回值,函数最终成功,但json中的字符串“answer”为null。
例如answer = abc
(打印带有警报的“abc”)和JSON看起来像这样:
{
"answer": null
}
我没有在我的jsp中使用form属性(由于另一个jQuery逻辑,它似乎不适用于form属性)。我错过了什么?提前谢谢!
答案 0 :(得分:0)
由于Response是一个自定义类,我猜测你遇到的问题是你没有分配一个值,你刚刚创建了对象实例。 Unles您在此处为默认构造函数指定了值。你只是用它做了一个实例
Response answer = new Response();
您没有设置任何值。出于测试目的尝试这样的事情
public @ResponseBody Map<String,String> addAnsw(HttpServletRequest request, HttpServletResponse response) {
然后分配值
Map<String,String> test = new HashMap<String,String>();
test.put("answer","hi");
return test;
如果您希望您的响应能够工作,您可以在默认构造函数中输入一个值。或创建自定义构造函数。或者提供一个能够在
中设置值的setterpublic Response() {
this.answer= "My Cool answer"; // Asuming answer is a String
}
要在json中从客户端接收数据,您可以执行以下操作
@RequestMapping(value = "/add",method=RequestMethod.POST)
public Response addAnsw(@RequestBody YourCustomClass yourRequest) {
请注意,YourCustomClass必须具有所有getter和setter,或者应该相应地进行注释,以便Jackson可以反序列化您发送到服务器的内容。
希望有所帮助