【问题标题】:Spring controller is not hitting. Going to error block弹簧控制器没有击中。进入错误块
【发布时间】:2015-04-24 21:50:53
【问题描述】:

我试图从我的 JSP 页面点击控制器。我编写了以下函数,单击特定链接时将调用该函数。

函数实现如下图:

function categorySearchBasedOnParentId(name,id){
        $.ajax({
                url:"${pageContext.request.contextPath}/customer/get_categoriesByParentId.shx",
                data: 'id='+id,
                success:function(data){
                    var obj1 = jQuery.parseJSON(data);
                    var obj2 = obj1.tempCategoriesList;
                    $("#subCategoriesFilter").html(buildSub(obj2));
                },
                error:function(data,status,err){
                    alert("Error occured while searching the categories based on the parent category id");
                }
        });

在上面的函数中,我试图点击控制器 url,控制器返回 JSON 对象。我正在将 JSON 转换为 JavaScript 对象并迭代它的值以显示在特定的 div 标签中。

我在spring写的控制器如下。

@RequestMapping(value = "/customer/get_categoriesByParentId.shx",method = RequestMethod.GET,    headers="Accept=*/*")
    public @ResponseBody String getCategoriesByParentId(Model model,HttpSession session,
        @ModelAttribute("shoppingCart") ShoppingCart shoppingCart,
        @RequestParam("id") String id) throws IOException{
        shoppingCart.setTempCategoriesList(categoryDao.getAllCategoriesByParentCategoryId(id));
        model.addAttribute("shoppingCart", shoppingCart); 
        String json = JSONUtil.createJsonString(shoppingCart);
        System.out.println(json);
        return json;
    }

我做了以下测试: 1)该值已正确传递给函数。我已经警觉并看到了。 2)相同的控制器调用可以在另一个项目中完成。它正在返回 JSON 对象。

我在控制台无限时间出现以下错误。

at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)
    at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)
    at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)

我几乎把一整天的时间都浪费在了这上面。我需要帮助。请帮帮我。

【问题讨论】:

  • 你可以尝试删除 @ModelAttribute("shoppingCart") ShoppingCart shoppingCart 作为参数,看看它是否击中控制器?既然你在做 GET,我想知道 @ModelAttribute("shoppingCart") 没有被传入。
  • @minion :我需要 shoppingCart 对象值,所以我无法删除它。我必须将其转换为 JSON 并将其发送到视图,即; jsp页面。我在 org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java: 150) 在 org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)
  • 你从哪里得到购物车?某些功能必须通过它。还提供完整的堆栈跟踪。
  • @minion:我存储的 shoppingCart 的值是之前使用它设置方法的函数。像这样然后将其添加到模型属性中,如下所示 shoppingCart.setCategories(categoryManager.getCategories(categoryType)); shoppingCart.setCategoriesMap(categoryManager.getCategoriesMap(categoryType)); model.addAttribute("shoppingCart", shoppingCart);
  • 能把之前的函数贴出来吗? spring flow中如何调用之前的函数?

标签: javascript jquery ajax spring-mvc spring-security


【解决方案1】:

使用@RestController 注释您的控制器并返回您的购物车。 Spring 会将其转换为 JSON。

如果要更改转换器,则必须为此配置 Spring,但它应该可以开箱即用地用于常见用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2021-06-18
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多