我收到错误,当服务A使用http出站网关呼叫服务B时无法找到合适的消息转换器。
<int:header-enricher input-channel="addHeader" output-channel="s3publishWithHeader">`
<int:header name="Content-Type" value="multipart/form-data" overwrite="true"/> </int:header-enricher>`
<util:list id="converters">
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
</util:list>`
<http:outbound-gateway request-channel="s3publishWithHeader"
http-method="POST" url="http://localhost:8090/com/api/upload"
extract-request-payload="true" message-converters="converters"
></http:outbound-gateway>
Spring Integration版本:4.3.12
答案 0 :(得分:2)
使用Resource
多部分时,此资源具有文件名似乎至关重要,否则我发现接收服务器抱怨该部分不存在。
将成为多部分请求正文的MultiValueMap
可以包含HttpEntity
个部分,您可以在其中更精确地指定这些部分,例如您可以指定文件名。
假设您有两个部分,request
和file
,并且文件是InputStreamResource
(从来没有文件名),则必须使用{{ 1}}标头。将结果映射用作传出消息有效负载,如下所示:
Content-Disposition
答案 1 :(得分:1)
您无需指定Content-Type
标头,也无需配置自定义转换器。
只有payload
为Map<String, Object>
:
else if (content instanceof Map) {
// We need to check separately for MULTIPART as well as URLENCODED simply because
// MultiValueMap<Object, Object> is actually valid content for serialization
if (this.isFormData((Map<Object, ?>) content)) {
if (this.isMultipart((Map<String, ?>) content)) {
contentType = MediaType.MULTIPART_FORM_DATA;
}
else {
contentType = MediaType.APPLICATION_FORM_URLENCODED;
}
}
}
尽管如此,你必须向StackTrace显示错误,因为我认为有一些响应解析。