【问题标题】:Spring MVC: How to modify response sent from spring controller?Spring MVC:如何修改从 spring 控制器发送的响应?
【发布时间】:2012-12-15 02:31:33
【问题描述】:

我有一个使用 Spring MVC 3.1.3 和使用 Dojo 1.4 开发的 UI 的应用程序。该应用程序很少有控制器可以处理通过dojo.io.iframe.send 上传的二进制文件。控制器发送一个必须用

包围的 json 响应
<html><body><textarea>{my json response}</textarea></body></html>.

我已经实现了在 web.xml 中定义的自定义过滤器:

<filter>
    <filter-name>dojoIframeFilter</filter-name>
    <filter-class>com.app.web.MultipartAjaxFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>dojoIframeFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

过滤器的doFilter有这种行为,取自http://www.oracle.com/technetwork/java/filters-137243.html

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {

    if (request.getContentType() != null
            && request.getContentType().contains("multipart/form-data")) {
        CharResponseWrapper wrapper = new CharResponseWrapper((HttpServletResponse) response);

        chain.doFilter(request, wrapper);
        log.info(wrapper.toString());
        //Modify response here
    } 
    else {
        chain.doFilter(request, response);
    }
}

包装器的输出为空。我还尝试了许多其他组合,例如为 spring 的调度程序 servlet 放置自定义过滤器,取消 doFilter 中的 if 块,这些都不起作用。我还尝试编写一个同样失败的 Spring 拦截器。有人可以提出任何其他想法吗?

提前致谢。

更新:我禁用了 spring 安全性并使用纯 spring mvc 进行了测试,但问题仍然存在。我已经修改了标题和问题描述。

【问题讨论】:

  • 你能给出你正在使用的 CharResponseWrapper 的完全限定类名吗?
  • @TomMcIntyre 你是建议我将 FQCN 添加到类型声明中还是你要求它?无论如何,它是 com.app.web.CharResponseWrapper

标签: spring-mvc servlet-filters


【解决方案1】:

朋友们,为了成功修改ServletResponse,我们还需要继承ServletOutputStream。详细解决方法请见http://docstore.mik.ua/orelly/xml/jxslt/ch08_04.htm

【讨论】:

    猜你喜欢
    • 2014-09-21
    • 2015-10-19
    • 2016-09-21
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    相关资源
    最近更新 更多