Spring ResponseBodyAdvice, который может работать с ResponseEntity - PullRequest
0 голосов
/ 11 июля 2020

Мне очень нравится Spring ResponseBodyAdvice, это функция, которую я обнаружил совсем недавно. Вот простой, который я написал:

@ControllerAdvice
class ClientResponseAdvice : ResponseBodyAdvice<Client> {

    override fun supports(method: MethodParameter, clazz: Class<out HttpMessageConverter<*>>): Boolean {
        return method.parameterType == Client::class.java
    }

    override fun beforeBodyWrite(client: Client?, param: MethodParameter, mediaType: MediaType, clazz: Class<out HttpMessageConverter<*>>, req: ServerHttpRequest, res: ServerHttpResponse): Client? {
        return client?.copy(clientSecret = "")
    }

}

В этом случае я использую совет по удалению clientSecret из полезной нагрузки ответа, поэтому ответ с этим чувствительным значением не может быть отправлен. Проблема в том, что в моих контроллерах иногда я хочу вернуть ResponseEntity<Client> вместо клиента напрямую (разные коды состояния / заголовки / et c). Когда я это делаю, ResponseBodyAdvice не может должным образом определить класс Client, и это не выполняется.

Я изучал все идеи, которые мог придумать самостоятельно, чтобы исправить это и заставить его работать очередной раз. Я пока что зашел в тупик.

...