【发布时间】:2016-09-26 19:17:38
【问题描述】:
我们的 Web API 使用 RESTEasy 编写。我们希望以Google Batch request 处理的工作方式为批处理请求提供支持。
以下是目前使用的方法,
我们有一个过滤器,它接受传入的多部分请求。然后这个过滤器创建多个模拟请求和响应对象,然后使用这些模拟请求调用chain.doFilter。
public class BatchRequestProcessingFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
MockHttpServletRequest[] mockRequests = BatchRequestProcessorUtils.parseRequest(request);
MockHttpServletResponse[] mockResponses = new MockHttpServletResponse[mockRequests.length];
for(int i=0 ; i <= mockRequests.length ; i++ ) {
chain.doFilter(mockRequests[i], mockResponses[i], chain);
}
BatchRequestProcessingUtils.populateResponseFromMockResponses(res, mockResponses);
}
}
MockHttpServletResponse 类返回一个虚拟的OutputStream,它包装了ByteArrayOutputStream。
BatchRequestProcessorUtils 解析多部分请求并返回模拟请求,该模拟请求包装了实际请求,但返回实际请求正文的拆分正文中指定的标头。
我找不到任何支持批处理请求处理的现有库。所以我的问题是,这是支持批处理请求的正确方法还是应该使用任何标准方法?
请注意,我们使用的是 Tomcat 8。
【问题讨论】:
-
我目前正在研究相同的主题。我目前会以完全相同的方式进行。结果如何?这是解决方案还是您以不同的方式解决了问题?
-
关于
MockHttpServletRequest:您是在使用实际的测试框架进行生产吗?这似乎不对。 -
@HerrDerb MockHttpServletRequest 只是一个占位符,实际类名不同。此外,这可行,但当然不会对此过滤器中创建的请求执行过滤器。
标签: java spring web-services servlet-filters