首页 > 解决方案 > 如何为 WebFluxRequestExecutingMessageHandler 设置内容类型

问题描述

我正在尝试使用 向外部服务发出 HTTP POST 请求,但在为出站请求设置标头WebFluxRequestExecutingMessageHandler时遇到了很多麻烦。Content-Type默认情况下,它设置Content-Typex-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
        }

    })

有没有更好的方法来实现这一点?

谢谢。

标签: spring-integration

解决方案


DefaultHttpHeaderMapper.outboundMapper()能力映射一个:

case "contenttype": // Lower case for MessageHeaders.CONTENT_TYPE
            setContentType(target, value);

Content-TypeHTTP 标头。MessageHeaders.CONTENT_TYPE因此,您可以在将消息发送到 this 之前尝试在上游设置该消息头WebFluxRequestExecutingMessageHandler

x-java-serialized-object不是一个标准MimeType,所以我猜你有一个类似的配置WebFluxRequestExecutingMessageHandler.setExtractPayload(false),这意味着尝试Message<?>通过 HTTP 发送整个。不确定这是否是您想要实现的目标,因为Message<?>它不完全兼容 JSON...


推荐阅读