我正在嘗試設置內容類型的圖像主機服務的響應,所以我有一個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
當然。我正在使用2.1.3.RELEASE。我添加的代碼在編輯中,以及結果(因爲我不能在註釋中添加代碼)。 – Joe 2012-07-16 14:23:34
你可以嘗試一件事...在標題豐富你可以使用小寫,而不是大寫「內容類型」? – mfisher 2012-07-16 16:23:35
我只是嘗試了下面的框頭內容類型的頭文件richher,然後在網關中每次都有相同的結果(重複的Content-Type HTTP頭文件)。我可以創建一個消毒版本的項目並將其發佈到github上。你認爲這會有幫助嗎? – Joe 2012-07-16 21:28:11