2012-07-14 31 views
1

我正在嘗試設置內容類型的圖像主機服務的響應,所以我有一個http:入站網關,看起來像這樣:Spring集成http入站網關映射的響應頭 - 被複制?

<int-http:inbound-gateway request-channel="receiveChannel" 
          reply-channel="responseChannel" 
          path="/profile/photo" 
          mapped-response-headers="Content-Type" 
          message-mappers="messageConverterList" 
          supported-methods="GET"/> 

...和服務激活因子看起來像這樣:

<int:service-activator 
    input-channel="receiveChannel" 
    output-channel="imageResponseChannel" 
    expression="@profileService.getPhoto(payload.userId)"/> 

...它返回jpeg圖像數據的byte []。我有一個頭富集,看起來像這樣:

<int:header-enricher 
    input-channel="imageResponseChannel" 
    output-channel="responseChannel"> 
    <int:header 
     name="Content-Type" 
     expression="'image/jpeg'"/> 
</int:header-enricher> 

但是當我運行的項目,我得到這樣用頭一個響應:

< HTTP/1.1 200 OK 
< Set-Cookie: JSESSIONID=9uw5c136fia6s9ivxgivy1yc;Path=/ 
< Expires: Thu, 01 Jan 1970 00:00:00 GMT 
< Content-Type: image/jpeg 
< Content-Type: application/octet-stream 
< Content-Length: 6563 
< Server: Jetty(8.1.3.v20120416) 

注意,內容類型是重複的,但它是我的理解是,映射響應頭應該從消息中抓取標題,而不是從有效載荷中確定它。

任何想法?提前致謝!

*編輯:我改變了入站網關引用下面的自定義消息映射器,但我仍然得到相同的結果。編輯2:原來它應該是消息轉換器,但我沒有得到一個錯誤,因爲我修改了目標文件而不是src。我做了更正,這是我得到的輸出:

< HTTP/1.1 200 OK 
< Content-Type: image/jpeg 
< Content-Type: image/jpeg 
< Content-Length: 209582 
< Server: Jetty(6.1.10) 

更好,但並不完美。這裏的問題的簡單再生產項目:http://dl.dropbox.com/u/92800052/http.tar.gz

你可以用

mvn package jetty:run 

運行它,看到的輸出與

curl -v http://localhost:8080/http/photo > /dev/null 

回答

0

默認情況下,幾個HttpMessageConverters(從核心的Spring Web LIB)爲入站網關注冊。其中之一是ByteArrayHttpMessageConverter,它的默認內容類型是「application/octet-stream」。您可以嘗試在網關上設置「message-converters」屬性,以便它引用包含ByteArrayHttpMessageConverter單個實例的List-typed bean(例如,您可以使用util:list) - 而不是依賴默認轉換器,然後在該實例中將supportedMediaTypes屬性設置爲'image/jpeg'。 AFIK,ByteArrayHttpMessageConverter不應該嘗試設置一個Content-Type頭(如果已經存在的話)(即來自映射的響應頭),但我只是想檢查並確定這個改變是否真的繞過了重複。

另外,您可以讓我們知道您使用的是什麼版本的Spring集成?

謝謝, 馬克

+0

當然。我正在使用2.1.3.RELEASE。我添加的代碼在編輯中,以及結果(因爲我不能在註釋中添加代碼)。 – Joe 2012-07-16 14:23:34

+0

你可以嘗試一件事...在標題豐富你可以使用小寫,而不是大寫「內容類型」? – mfisher 2012-07-16 16:23:35

+0

我只是嘗試了下面的框頭內容類型的頭文件richher,然後在網關中每次都有相同的結果(重複的Content-Type HTTP頭文件)。我可以創建一個消毒版本的項目並將其發佈到github上。你認爲這會有幫助嗎? – Joe 2012-07-16 21:28:11

相關問題