如何在使用SpringMVC解析视图后设置内容长度?
我们正在为正在构建的API使用SpringMVC(3.0.5)。但是,我们发现应用程序并不总是在响应头中返回内容长度。为什么我还没弄明白。我们不能在控制器中手动设置内容长度(request.setContentLength(x)),因为我们只使用Freemarker视图中控制器获得的数据的子集。所以基本上我们需要的是在一个视图被解析/编译之后,在它实际发送到客户端之前,计算并设置内容长度如何在使用SpringMVC解析视图后设置内容长度?,spring,http,spring-mvc,http-headers,freemarker,Spring,Http,Spring Mvc,Http Headers,Freemarker,我们正在为正在构建的API使用SpringMVC(3.0.5)。但是,我们发现应用程序并不总是在响应头中返回内容长度。为什么我还没弄明白。我们不能在控制器中手动设置内容长度(request.setContentLength(x)),因为我们只使用Freemarker视图中控制器获得的数据的子集。所以基本上我们需要的是在一个视图被解析/编译之后,在它实际发送到客户端之前,计算并设置内容长度 有什么常见的(“良好实践”)方法可以做到这一点吗?或者甚至是“丑陋”的方式?通过实现HandlerInter
有什么常见的(“良好实践”)方法可以做到这一点吗?或者甚至是“丑陋”的方式?通过实现
HandlerInterceptor
接口来拦截您的请求。afterCompletion
方法在解析视图后运行,因此您应该能够在那里设置值,因为该方法的签名传递了HttpServletResponse
。据此配置:
<!-- Configures Handler Interceptors -->
<mvc:interceptors>
<bean class="com.myapp.web.interceptor.MyInterceptor" />
</mvc:interceptors>
酷!此时它是否可以访问已解析的视图?为了计算内容长度,我相信是这样,因为afterCompletion方法在所有处理程序和视图处理完成后运行。请参阅David关于如何获取响应大小的回答。实际上,这不起作用,因为侦听器方法postHandle将在解析和发送视图之前运行,而afterCompletion将在解析和发送视图之后运行。使用此解决方案之间没有任何关联
@Component
public class MyInterceptor implements HandlerInterceptor {
}