如何从spring mvc控制器获取jQuery $ .post的POST请求参数?

时间:2017-04-23 15:47:54

标签: javascript java jquery spring-mvc post

我需要在页面上动态加载数据库中的数据,而不需要重新加载页面。

我在JSP中的代码是这样的:

<script>
$(document).ready(function() {
    $("#ClassNext").click(function(event){
        var data = {};
        var classArray = [];
        $.each($("input[name='classCheckbox']:checked"), function(){            
            classArray.push($(this).val());
        });
        console.log(classArray);
        data["list"] = classArray;
        data["var"] = "1";
        console.log(data);
        $.post('PopulateClassSample',data,function(responseJson){
            if(responseJson!=null){
                $.each(responseJson,function(key,value){
                    // do something
                })
            }
        })
    })
});
<script>
<c:forEach items="${classList}" var="Class">     
    <li>
        <input class="classCheckbox" type="checkbox" name="classCheckbox" value="${Class.classStart}"></input>
        <c:out value="${Class.showString}"/>
        <button style="display: none;" id="${Class.classStart}">Edit</button>
    </li>
</c:forEach>

<button id="ClassNext">Next</button>

这里我发布了一个通过jQuery POST($ .post)从数据库中提取一些信息的请求。我希望响应作为一个JSON对象,其中包含数据库中的信息。 data变量是两个字段的对象 - 一个字段包含字符串数组,另一个字段包含字符串。这个data变量通过javascript正确获取其所需的值。

在控制器中捕获此请求的方法:

@RequestMapping(value="/PopulateClassSample", method = RequestMethod.POST)
    @ResponseBody
    protected void SendResponse(@RequestParam("list") ArrayList<String> list, @RequestParam("start") String start, HttpServletResponse response) throws IOException
    {
        for(String s:list){
            System.out.println(s);

        }
        System.out.println(start);
        /*

        ArrayList<AcademicClass> classList = new ArrayList<AcademicClass>();
        DataAccess db = new DataAccess();
        classList = db.getClassList();
        Gson gson = new Gson();
        JsonElement element = gson.toJsonTree(classList,new TypeToken<List<AcademicClass>>() {}.getType());
        JsonArray jsonArray = element.getAsJsonArray();
        response.setContentType("application/json");
        response.getWriter().print(jsonArray);
        */
    }

在DataAccess类中,我正在进行所有数据库查询并通过其方法返回结果。我在这里需要HttpServletResponse对象,因为我将jQuery代码作为JSON对象返回。 但是我在控制台中遇到这样的错误:

jquery.min.js:4 POST http://localhost:8080/Mytuition/PopulateClassSample 400 ()

控制器方法中的初始打印不会被执行。

我尝试声明一个单独的模型类(它有两个字段 - 一个字符串的StringList和一个String)并使用了@ModelAttribute注释。但后来我得到这样的例外:

java.lang.NumberFormatException: For input string: ""

没有@ModelAttribute注释,有没有办法做到这一点?即使我使用@ModelAttribute注释,为什么这不起作用?

注意:我肯定会向JSP返回一些东西。该部分仅出于测试目的而被注释掉。

1 个答案:

答案 0 :(得分:1)

你的控制器方法错了。如果您正在对服务器执行Ajax调用并需要从服务器检索JSON响应,则只需执行两项操作。

  1. 使用@ResponseBody在控制器中定义方法。然后Spring会将您的返回对象转换为JSON格式

  2. 将一些对象返回到视图中。你要回来&#34; void&#34;

  3. 应该是这样的

    {{1}}