Мне очень нравится 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, и это не выполняется.
Я изучал все идеи, которые мог придумать самостоятельно, чтобы исправить это и заставить его работать очередной раз. Я пока что зашел в тупик.