我需要将多个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或任何其他状态代码和它认为正确的数据。
这对任何弹簧项目都可行吗?优选弹簧mvc。
请指出正确的方向
答案 0 :(得分:0)
这里的难点在于,由于所有这些请求都在聚合请求中作为multipart元素传输,因此一个控制器将收到一个真实的HttpRequest,其中包含包含请求文本的文件,其工作将是要解析每个部分的文本,做Tomcat和DispatcherServlet通常做的事情!
我想象的唯一方法是这个控制器打开一个到tomcat服务器的低级别Socket连接(即在端口8080上),分别发送不同的部分,得到不同的文本的响应(而不是HttpResponseS),将它们连接为一个mime multipart对象,并将其作为自己的响应主体发回。您仍然需要在串行操作(单个连接上的一个部分)之间进行选择,并行操作(一个部分在其自身的连接上)或在处理请求的连接上与池混合。
但它将是一个非常低级别的组件,与实际服务几乎没有关系。
根据评论编辑:
一开始,我认为调用service
的{{1}}方法就足够了。但这并不容易,因为:
DispatcherServlet
,但只能获取其DispatcherServlet
- 确定调用include方法就足够了,但有点棘手RequestDispatcher
(并且还从头开始生成HttpServletRequest
),这通常由容器完成。这就是为什么我陷入低级套接字解决方案的原因,这似乎是矛盾的更直接