Рассмотрим контроллер, который возвращает 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
...
}
}
}
}
Есть две проблемы:
- Джексон не знает о HttpServletRequest, поэтому он не может получить параметр
clearDomain
. - Я не могу найти способ сказать Джексону что-то сделать в конце ответа.