Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用SpringMVC解析视图后设置内容长度?_Spring_Http_Spring Mvc_Http Headers_Freemarker - Fatal编程技术网

如何在使用SpringMVC解析视图后设置内容长度?

如何在使用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

我们正在为正在构建的API使用SpringMVC(3.0.5)。但是,我们发现应用程序并不总是在响应头中返回内容长度。为什么我还没弄明白。我们不能在控制器中手动设置内容长度(request.setContentLength(x)),因为我们只使用Freemarker视图中控制器获得的数据的子集。所以基本上我们需要的是在一个视图被解析/编译之后,在它实际发送到客户端之前,计算并设置内容长度


有什么常见的(“良好实践”)方法可以做到这一点吗?或者甚至是“丑陋”的方式?

通过实现
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 {
}