WebMvcConfigurer и постобработка Джексона - PullRequest
0 голосов
/ 06 августа 2020

Рассмотрим контроллер, который возвращает URL-адреса с протоколом и доменом:

GET /test
{"url": "https://example.com/foo/bar"}

Я хотел бы реализовать фильтр или модификацию для Джексона, которые будут обрабатывать такие ответы и удалять протокол и домен на основе параметра:

GET /test?clearDomain=true
{"url": "/foo/bar"}

Я пробовал через фильтры, но застрял в цикле с getWriter() has already been called for this response - не думаю, что это сработает для всех случаев.

через постобработку Джексона:

class WebConfigurer : WebMvcConfigurer {
    override fun extendMessageConverters(converters: MutableList<HttpMessageConverter<*>>) {
        // configureMessageConverters will leave out the default ones which are necessary
        val originalList = ArrayList(converters)

        converters.forEach {
            if (it is MappingJackson2HttpMessageConverter) {
                it.objectMapper // TODO postprocess somehow here
                ...
            }
        }
    }
}

Есть две проблемы:

  1. Джексон не знает о HttpServletRequest, поэтому он не может получить параметр clearDomain.
  2. Я не могу найти способ сказать Джексону что-то сделать в конце ответа.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...