我正在尝试设置内容类型的图像主机服务的响应,所以我有一个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