2014-09-29 40 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