[SOS] >> Struts2 使用Gson 输出Json 字符串,无法输出

发布于 2021-11-13 15:36:40 字数 4007 浏览 822 评论 2

 

 public String delete() {
        System.out.println("11:" + getResponse());
        if (attribute != null && attribute.getId() != null
                && !StringUtils.isEmpty(attribute.getId())) {
            this.productTypeAttributeService.delete(this.attribute.getId());
            return super.printJSON(new Message(null, "属性删除成功",
                    Message.SUCCESS_TYPE, null));
        }
        return message(new Message(null, "参数错误", Message.ERROR_TYPE,
                "/admin/product-type!list.do"));
    }

 

protected String printJSON(Object obj) {
        HttpServletResponse response = getResponse();
        response.setContentType("text/json");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = null;

        // System.out.println(obj);
        // String jsonResult = gson.toJson(obj);
        // System.out.println(jsonResult);
        
        System.out.println("22:" + response);
        
        try {
            out = response.getWriter();out.write("2222222222222222222222");
            String jsonString  = gson.toJson(obj);
            System.out.println(jsonString);
            out.write(jsonString);
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            out.close();
        }

        return null;
    }

控制台:

11:org.tuckey.web.filters.urlrewrite.UrlRewriteWrappedResponse@539269cb
Hibernate:
    select
        producttyp0_.uuid as uuid13_1_,
        producttyp0_.createTime as createTime13_1_,
        producttyp0_.disabled as disabled13_1_,
        producttyp0_.orderIndex as orderIndex13_1_,
        producttyp0_.inputType as inputType13_1_,
        producttyp0_.name as name13_1_,
        producttyp0_.notNull as notNull13_1_,
        producttyp0_.productType_uuid as product10_13_1_,
        producttyp0_.searchFilter as searchFi8_13_1_,
        producttyp0_.showNull as showNull13_1_,
        options1_.attribute_uuid as attribute6_13_3_,
        options1_.uuid as uuid3_,
        options1_.uuid as uuid14_0_,
        options1_.createTime as createTime14_0_,
        options1_.disabled as disabled14_0_,
        options1_.orderIndex as orderIndex14_0_,
        options1_.attribute_uuid as attribute6_14_0_,
        options1_.name as name14_0_
    from
        product_type_attribute producttyp0_
    left outer join
        product_type_attribute_option options1_
            on producttyp0_.uuid=options1_.attribute_uuid
    where
        producttyp0_.uuid=?
Hibernate:
    delete
    from
        product_type_attribute
    where
        uuid=?
22:org.tuckey.web.filters.urlrewrite.UrlRewriteWrappedResponse@539269cb
{"content":"属性删除成功","type":1}

out.write("2222222222222222222222");

但是out.write没有输出到客户端来,firebug检测XHR没有返回任何的东西。后台没有错误。这段代码表明out无法返回内容。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

噩梦成真你也成魔 2021-11-14 23:54:50

最后修改为这样就可以正常返回了。

 

 protected String printJSON(Object obj) {
        HttpServletResponse response = this.getResponse();
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json");
        PrintWriter out = null;
        try {
            out = response.getWriter();
            String jsonString  = gson.toJson(obj);
            out.write(jsonString);
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            out.close();
        }

        return null;
    }

设置成response.setContentType("text/json");在firebug中看不到返回的内容,但是jquery确实是拿到了。而且判断出了json的内容。如果设置成response.setContentType("application/json");,firebug里面可以看到返回的内容。jquery也判断json的内容。

最后发现不是后台设置response.setContentType("text/json");或者是response.setContentType("application/json");的问题。发现使用了$.getJSON,就有问题。直接使用$.get就没有问题。在callback的方法里面都是将返回的东西直接当作json使用的。

使用的Jquery版本是jQuery JavaScript Library v1.5.1 ,有可能是这个版本的问题。和rewriterurl也没有任何的关系。

 

 

最后经过简单的测试,换成jQuery JavaScript Library v1.4.4 ,getJSON也可以使用了,就没有这个问题了。 jquery  fuck you `!~

南冥有猫 2021-11-14 23:23:22

怀疑是Urlrewriter的问题。注释掉配置;

两次输出response变成了下面的,但是还是没有任何的输出。

11:org.apache.catalina.connector.ResponseFacade@5ae9581b

22:org.apache.catalina.connector.ResponseFacade@5ae9581b

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文