Как установить тип содержимого для WebFluxRequestExecutingMessageHandler - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь сделать HTTP-запрос POST для внешней службы, используя WebFluxRequestExecutingMessageHandler, и у меня много проблем с получением заголовка 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 Ответ

1 голос
/ 28 мая 2019

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), что означает попытку отправить весь Message<?> по HTTP. Не уверен, что именно этого вы хотите достичь, потому что Message<?> не полностью совместим с JSON ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...