JSON ajax返回空值

时间:2018-01-08 23:46:31

标签: jquery json ajax spring spring-mvc

我正在使用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属性)。我错过了什么?提前谢谢!

1 个答案:

答案 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;

如果您希望您的响应能够工作,您可以在默认构造函数中输入一个值。或创建自定义构造函数。或者提供一个能够在

中设置值的setter
public 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可以反序列化您发送到服务器的内容。

希望有所帮助