我正在尝试使用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
}
})
是否有更好的方法来实现这一目标?
谢谢。
答案 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,因此不确定是否要实现此目标。