2014-09-29 47 views
0

我有一个需要在多个HTTP请求中被批一个HTTP POST像这样:配合不同控制技术解析多部分请求

Accept:application/json, text/plain, */* 
Accept-Encoding:gzip,deflate,sdch 
Connection:keep-alive 
Content-Length:604 
Content-Type:multipart/mixed; boundary=1408785817122 
Host:localhost:8080 
Origin:null 

--1408785817122 
Content-Type: application/http; msgtype=request 

GET /api/products HTTP/1.1 
Host: localhost:8080 
Accept: application/json, text/plain, */* 


--1408785817122 
Content-Type: application/http; msgtype=request 

POST /api/users/2 HTTP/1.1 
Host: localhost:8080 
Accept: application/json, text/plain, */* 

一些数据队2放在这里。

--1408785817122 
Content-Type: application/http; msgtype=request 

PUT /api/products HTTP/1.1 
Host: localhost:8080 
Accept: application/json, text/plain, */* 
Content-Type: application/json;charset=utf-8 

"{\"Name\":\"Product X\",\"StockQuantity\":300}" 

--1408785817122-- 

我有罐子服务器端,包括从不同的团队。每个团队都包括拥有自己的控制器的罐子。第一队需要回应第一部分,第二队到第二队等等。我需要返回一个单一的多部分响应,其中每个边界包含来自每个指定控制器的具有200或任何其他状态代码和它认为正确的数据的响应。

  1. 所以分散在不同的罐的控制器需要由过程
  2. 作为多部分请求时,正确的控制器需要被调用
  3. 单多响应需要包含要被返回得到扫描和加载来自所有控制器的成功或失败响应。

这对任何春季项目都可行吗?最好是弹簧mvc。

请点我在正确的方向

+0

我很好奇 - 你如何产生这样的要求。我可以想象用这种方式聚集多个请求体(如文件内容),但这与我之前完成的不同 - 将实际的http请求分配在一起。 AFAIK,我不认为Spring MVC在本地提供了这种支持,但我可以想象在自定义编排控制器中添加,可以接受此请求并转发给不同的控制器(或服务)并将其聚集回来。 – 2014-10-02 14:05:09

+0

请求通过js生成。某些网址注册了特定的工作流程。所以js知道,在提交之前,3个网址会被击中,因此它将截取并合并为1。 – TimJohnson 2014-10-03 20:13:35

回答

0

这里最艰难的部分是,所有这些请求都以聚合的请求作为多元素传输,一个单一的控制器将获得真正的HttpRequest,含文件包含文本对于请求来说,它的工作就是解析每个部分的文本,完成通常Tomcat和DispatcherServlet所做的工作!

我想象会是这个控制器打开低水平Socket连接到Tomcat服务器的唯一方式(即在端口8080),separatly发送型动物部分,得到不同文本响应(而不是HttpResponseS) ,将它们连接为一个MIME多部分对象,并将其作为自己的响应主体发回。您仍然必须在串行操作之间进行选择(在单个连接上一个接一个),并行操作(一个部分在其自己的连接上),或者在处理请求的连接上混合使用一个池。

但是它会是一个非常低层的组件,与实际的服务没什么关系。根据注释

编辑:

在开始的时候,我认为这可能足以调用DispatcherServletservice方法。但它不是那么容易,因为:

  • 我不知道如何找到配置DispatcherServlet,但只能获得其RequestDispatcher - 确定调用包括方法可能是不够的,但有点棘手
  • 你需要手动解析HTTP协议以生成HttpServletRequest(并且也从头生成HttpServletResponse),通常由容器完成的操作。

这就是为什么我下降到低水平插座解决方案的原因,这似乎矛盾的是更直接的

+0

对。我在想,可能DispatcherServlet会负责看到* /批处理的任何请求,并以同步,并行或异步方式(可配置)将多部分请求中的每个部分分派给具有设置的SLA的所有控制器(等待x毫秒,如果没有返回特定请求,则以多部分响应该部分的超时),这也将是可配置的。因此,如果发送了3个部分,并且如果2个响应在x毫秒内但第3个响应时间更长,则返回包含数据的2部分和超时部分的多部分响应。所有应该可配置,虽然 – TimJohnson 2014-10-02 19:12:42

+0

只需要一个解决方案,但。它应该是一个DispatcherServlet,Filter还是其他的东西?什么是impl细节? – TimJohnson 2014-10-02 19:15:33

+0

谢谢。我还看到了MultipartResolver(http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/MultipartResolver.html)。这能帮助我们吗? – TimJohnson 2014-10-02 21:15:07