我正在使用最新的Spring Integration 4.2.1.RELEASE,使用DSL配置。我的请求没有从入站请求映射的HTTP Header Content-type。Spring集成4.2.1.RELEASE内容类型头文件未映射
已经解决了旧的JIRA INT-3508。在4.0 to 4.1 migration guide,似乎说这是固定的。
但是我的代码没有请求头。
@Bean
public IntegrationFlow httpProxyFlow() {
return IntegrationFlows
.from((MessagingGateways g) ->
g.httpGateway("/csa-service/**")
.messageConverters(getMessageConverter())
.payloadFunction(httpEntity ->
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest()
.getQueryString())
.requestPayloadType(String.class))
.handleWithAdapter(a ->
a.httpGateway(this::setupUrl)
.messageConverters(getMessageConverter())
.httpMethodFunction(this::getMethodFunction)
.errorHandler(new PassThroughErrorHandler())
.encodeUri(false)
.expectedResponseType(String.class)
).get();
}
private HttpMessageConverter getMessageConverter() {
StringHttpMessageConverter stringConverter = new StringHttpMessageConverter();
stringConverter.setWriteAcceptCharset(false);
stringConverter.setSupportedMediaTypes(Arrays.asList(//
MediaType.TEXT_PLAIN,
MediaType.APPLICATION_JSON_UTF8,
new MediaType("application", "*+json"),
MediaType.TEXT_HTML,
MediaType.APPLICATION_JSON));
return stringConverter;
}
当我调试DefaultHttpHeaderMapper,这个问题正是上面的JIRA提到,行730:
else if (MessageHeaders.CONTENT_TYPE.equalsIgnoreCase(name)) {
和静态变量映射回
public static final String CONTENT_TYPE = "contentType";
的migration guide from 3.0 to 4.0节目object-to-json-transformer和header-richher的配置。虽然4.0指南显示
<int:chain>
<int:object-to-json-transformer/>
<int-http:outbound-gateway url="http://service"/></int:chain>
好像在DSL相当于是
.transform(new ObjectToJsonTransformer())
然而,并称是引入了杰克逊数据绑定转换器,它带回wacked out JSON I just fixed with the help of Gary Russell on this question。