可以与 ResponseEntity 一起使用的 Spring ResponseBodyAdvice

use*_*059 5 spring spring-mvc

我真的很喜欢 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 = "")
    }

}
Run Code Online (Sandbox Code Playgroud)

在本例中,我使用建议从响应负载中删除 clientSecret,因此无法使用此敏感值发送任何响应。问题是在我的控制器中,有时我想ResponseEntity<Client>直接返回 a 而不是 Client (不同的状态代码/标头/等)。当我这样做时,ResponseBodyAdvice 无法正确检测 Client 类,并且不会执行。

我一直在探索我自己能想到的每一个想法来解决这个问题并让它再次运行。到目前为止我已经走进了死胡同。