spring-integration - 如何为 WebFluxRequestExecutingMessageHandler 设置内容类型
问题描述
我正在尝试使用 向外部服务发出 HTTP POST 请求,但在为出站请求设置标头WebFluxRequestExecutingMessageHandler
时遇到了很多麻烦。Content-Type
默认情况下,它设置Content-Type
为x-java-serialized-object
,但我打的服务只接受application/json
. 到目前为止,我发现的唯一解决方法是传入一个 custom HeaderMapper
:
webFluxRequestExecutingMessageHandler.setHeaderMapper(object : HeaderMapper<HttpHeaders> {
override fun toHeaders(source: HttpHeaders): MutableMap<String, Any> {
return mutableMapOf()
}
override fun fromHeaders(headers: MessageHeaders, target: HttpHeaders) {
target.contentType = MediaType.APPLICATION_JSON
}
})
有没有更好的方法来实现这一点?
谢谢。
解决方案
有DefaultHttpHeaderMapper.outboundMapper()
能力映射一个:
case "contenttype": // Lower case for MessageHeaders.CONTENT_TYPE
setContentType(target, value);
到Content-Type
HTTP 标头。MessageHeaders.CONTENT_TYPE
因此,您可以在将消息发送到 this 之前尝试在上游设置该消息头WebFluxRequestExecutingMessageHandler
。
这x-java-serialized-object
不是一个标准MimeType
,所以我猜你有一个类似的配置WebFluxRequestExecutingMessageHandler.setExtractPayload(false)
,这意味着尝试Message<?>
通过 HTTP 发送整个。不确定这是否是您想要实现的目标,因为Message<?>
它不完全兼容 JSON...
推荐阅读
- excel - 从 Excel 宏打开并写入 txt 文件
- python - 如何使用 timedelta64 添加小数天?
- python - numpy 将两个不同形状的数组广播到矩阵
- ros - 为什么 ROSBag 记录每秒只记录来自任何传感器的十个事件?
- java - Firebase 存储用户电子邮件但没有任何其他详细信息?
- java - 通过资源过滤访问配置文件属性
- oracle - 为什么 Oracle 时区错误?
- php - 从字符串到浮点/双精度的转换失败
- javascript - UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“声音”。在 play.js 中尝试运行命令时
- java - 关于如何将 Gmail 电子邮件回复保存到数据库的想法?