我正在尝试为图像主机服务设置响应的内容类型,所以我有一个http:inbound-gateway,如下所示:
<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)
请注意,内容类型会重复,但我的理解是mapped-response-headers应该从消息中获取标题,而不是从有效负载中确定它。
有什么想法吗?提前谢谢!
*编辑:我更改了入站网关以引用下面的自定义消息映射器,但我仍然得到相同的结果。
<util:list id="messageConverterList">
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter">
<property name="supportedMediaTypes">
<list><value>image/jpeg</value></list>
</property>
</bean>
</util:list>
*编辑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 :(得分:0)
默认情况下,为入站网关注册了几个HttpMessageConverters(来自核心Spring Web lib)。其中一个是ByteArrayHttpMessageConverter,它的默认内容类型是&#34; application / octet-stream&#34;。您可以尝试设置&#34;消息转换器&#34;您的网关上的属性,以便它引用包含ByteArrayHttpMessageConverter的单个实例的List类型的bean(例如,您可以使用util:list) - 而不是依赖于默认转换器,然后在该实例上将supportedMediaTypes属性设置为&# 39;图像/ JPEG&#39;
AFAIK,ByteArrayHttpMessageConverter不应该尝试设置Content-Type标头(如果已存在)(即来自映射的响应标头),但我只是想检查并确定该更改是否确实绕过了重复。
另外,您能告诉我们您正在使用的Spring Integration版本吗?
谢谢, 标记