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

Spring mvc 使用不同控制器解析多部分请求,spring-mvc,spring-boot,Spring Mvc,Spring Boot,我需要将多个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 -

我需要将多个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, */*
第二组的一些数据在这里

--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--
我有来自不同团队的JAR服务器端。每个团队都包括有自己控制器的JAR。第一组需要对第一部分做出回应,第二组需要对第二部分做出回应,依此类推。我需要返回一个多部分响应,其中每个边界包含来自每个指定控制器的响应,其中包含200或它认为正确的任何其他状态代码和数据

因此,分散在不同jar中的控制器需要通过进程进行扫描和加载 当多部分请求进入时,需要调用正确的控制器 需要返回包含来自所有控制器的成功或失败响应的单个多部分响应。 这对任何spring项目都可行吗?最好是春季mvc


请给我指出正确的方向

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

我想象的唯一方式是,该控制器在端口8080上打开一个到tomcat服务器ie的低级套接字连接,分别发送不同的部分,获取不同的响应文本,而不是HttpResponse,将它们连接为mime多部分对象,并将其作为自己的响应主体发送回。您仍然必须在单个连接上的串行操作(一部分接一部分)、自身连接上的并行操作(一部分)或处理请求的连接上与池的混合操作之间进行选择

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

按评论编辑:

起初,我认为调用DispatcherServlet的服务方法就足够了。但这并不容易,因为:

我不知道如何找到配置好的DispatcherServlet,但只能获取它的RequestDispatcher-ok调用include方法就足够了,但有点棘手 您需要手动解析HTTP协议以生成HttpServletRequest,还需要从头生成HttpServletResponse,这通常是由容器完成的。
这就是为什么我选择了低级别套接字的解决方案,而这种解决方案似乎更简单,这是自相矛盾的

我很好奇——您是如何生成这样的请求的。我可以想象以这种方式将多个请求文件内容集中在一起,但这与我之前所做的不同——将实际的http请求集中在一起。好了,我不认为Spring MVC本机提供了这种支持,但是我可以想象添加一个定制的编排控制器,它可以接收这个请求,然后发送到不同的控制器或服务,并将其聚合回来。请求是通过js生成的。为特定工作流注册某些URL。所以js知道在提交之前,会命中3个URL,所以它会截取并将所有URL合并为1。我在想,可能是DispatcherServlet负责查看进入*/批处理的任何请求,并以同步、并行或异步方式调度多部分请求中的每个部分,可配置为所有控制器,设置SLA等待x ms,如果未返回特定请求,在multipart中响应该部分的超时,该部分也是可配置的。因此,如果发送了3个部分,并且2个部分在x ms内响应,但第3个部分需要更长的时间,则返回一个多部分响应,其中2个部分包含数据,一个部分有超时。所有这些都应该是可配置的,尽管只需要一个解决方案。它应该是DispatcherServlet、筛选器还是其他什么?impl的详细信息是什么?谢谢。我还看到了一个多部分解析器。这对我们有什么帮助吗?@TimJohnson:必须使用MultipartResolver,但它只将multipart拆分为顺序文件,而不会将它们转换为ServletRequest对象。