使用不同的控制器解析多部分请求

时间:2014-09-29 03:08:45

标签: spring-mvc spring-boot

我需要将多个http请求批处理到一个http帖子中,如下所示:

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--

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

  1. 因此分散在不同罐子中的控制器需要通过过程进行扫描和加载
  2. 当多部分请求进入时,需要调用正确的控制器
  3. 需要返回单个多部分响应,其中包含来自所有控制器的成功或失败的响应。
  4. 这对任何弹簧项目都可行吗?优选弹簧mvc。

    请指出正确的方向

1 个答案:

答案 0 :(得分:0)

这里的难点在于,由于所有这些请求都在聚合请求中作为multipart元素传输,因此一个控制器将收到一个真实的HttpRequest,其中包含包含请求文本的文件,其工作将是要解析每个部分的文本,做Tomcat和DispatcherServlet通常做的事情!

我想象的唯一方法是这个控制器打开一个到tomcat服务器的低级别Socket连接(即在端口8080上),分别发送不同的部分,得到不同的文本的响应(而不是HttpResponseS),将它们连接为一个mime multipart对象,并将其作为自己的响应主体发回。您仍然需要在串行操作(单个连接上的一个部分)之间进行选择,并行操作(一个部分在其自身的连接上)或在处理请求的连接上与池混合。

但它将是一个非常低级别的组件,与实际服务几乎没有关系。

根据评论编辑:

一开始,我认为调用service的{​​{1}}方法就足够了。但这并不容易,因为:

  • 我不知道如何找到已配置的DispatcherServlet,但只能获取其DispatcherServlet - 确定调用include方法就足够了,但有点棘手
  • 您需要手动解析HTTP协议以生成RequestDispatcher(并且还从头开始生成HttpServletRequest),这通常由容器完成。

这就是为什么我陷入低级套接字解决方案的原因,这似乎是矛盾的更直接