我使用的是最新的Spring集成4.2.1.RELEASE,使用DSL配置。我的请求没有从入站请求映射其 HTTP 标头内容类型。
有一个旧的JIRA INT-3508已解决。在4.0到4.1迁移指南中,似乎说这已修复。
然而,我的代码没有请求标题。
@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";
从3.0到4.0的迁移指南展示了object-to-json-transformer和header-enricher的配置。而4.0版指南显示
<int:chain>
<int:object-to-json-transformer/>
<int-http:outbound-gateway url="http://service"/></int:chain>
看起来DSL中的等价物是
.transform(new ObjectToJsonTransformer())
然而,添加这一功能将引入Jackson数据绑定转换器,它将恢复我在Gary Russell的帮助下刚刚修复的古怪JSON。
想出了一个解决方法。
.expectedResponseType(String.class)
)
.transform(new ObjectToJsonTransformer())
.get();
奏效了,但是97号线的电话
Object payload = ResultType.STRING.equals(this.resultType)
? this.jsonObjectMapper.toJson(message.getPayload())
: this.jsonObjectMapper.toJsonNode(message.getPayload());
导致我的有效载荷中的JSON被重新编码。所以我创建了一个自定义版本的类,并删除了这一行,现在我测试的一切都正常了。
doTransform()方法有我需要的内容类型修复,但是在我们的例子中,这个对象似乎并不需要。任何关于我如何能更好地实现这一点的建议将不胜感激。
我的服务器资源: 我的客户资源: 我的Build.Gradle文件:
我正在构建一个REST API, 和ActiveBid类 和我的泽西请求映射器,它具有获取数据的逻辑 有人能帮我吗?我不知道和卡桑德拉共事会这么难。
以下代码使用CORS协议完美地发送请求并接收响应。我想将内容类型标头更改为“应用程序/json”而不是“应用程序/x-www-form-urlencoded”。但是,当我将内容类型替换为“应用程序/json”时,请求失败。当我在浏览器中检查请求时,我可以看到内容类型标头已被删除而不是更改。 来自以上代码的请求 当“应用程序/x-web-form-urlencoded”被替换为“应用程序/json”
我在请求处理程序周围编写了一种包装器,使它们流式传输HTTP响应。我现在得到的是 处理程序响应包装器: 控制器: 我所做的只是每隔半秒发送一个空字符串,以保持请求的活动状态。某些工具需要在超时时不关闭它。这里的问题是,我在响应中没有看到任何内容类型头。尽管我从我的控制器方法返回ResponseEntity,但什么都没有,正如这条线程中所说: https://github.com/spring-pr
我设置header的方式如下: 它为一些服务工作,但我在添加自定义头的需求基础,我面临的问题。 我不能使用“.contenttype()”在请求中设置header,因为headersmap中动态设置的header的数量是可变的。
问题内容: 我正在尝试为作为JSON传入的对象创建内部类类型,但是尽管我在此处以及杰克逊的网站上都读了很多文章,但我似乎无法获得正确的组合,因此,如果其他人有任何指针,他们将不胜感激。我在下面发布了一些代码片段,并删除了所有的getter和setter,但我不认为他们需要发布。我正在使用Jackson 2.2。 我正在尝试反序列化的类: 我用来反序列化的代码: 我的JSON测试数据: 问题答案: