如何设置WebFluxRequestExecutingMessageHandler的内容类型

时间:2019-05-27 13:04:05

标签: spring-integration

我正在尝试使用WebFluxRequestExecutingMessageHandler向外部服务发出HTTP POST请求,并且在为出站请求设置Content-Type头时遇到很多麻烦。默认情况下,它将Content-Type设置为x-java-serialized-object,但是我要访问的服务仅接受application/json。到目前为止,我发现的唯一方法是传递自定义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
        }

    })

是否有更好的方法来实现这一目标?

谢谢。

1 个答案:

答案 0 :(得分:1)

DefaultHttpHeaderMapper.outboundMapper()可以映射以下内容:

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

Content-Type HTTP标头。因此,您可以尝试在向此MessageHeaders.CONTENT_TYPE发送消息之前,先在上游设置WebFluxRequestExecutingMessageHandler消息头。

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