Java 如何注册在消息转换器之前工作的RestController拦截器?

Java 如何注册在消息转换器之前工作的RestController拦截器?,java,spring-mvc,interceptor,spring-restcontroller,Java,Spring Mvc,Interceptor,Spring Restcontroller,在springmvc中是否有任何方法可以注册intercepts,该intercepts在序列化之前接受RestController返回值 类似于@RestControllerAdvice但用于返回值 我知道我可以绕过invoke advice,但我认为应该有一些标准的方法来做到这一点。HandlerInterceptor的postHandle方法获取HttpServletResponse对象,到那时HttpMessageConverter已经序列化了响应。据我所知,你不会明白的。但是Rest控

springmvc
中是否有任何方法可以注册intercepts,该intercepts在序列化之前接受
RestController
返回值

类似于
@RestControllerAdvice
但用于返回值


我知道我可以绕过invoke advice,但我认为应该有一些标准的方法来做到这一点。
HandlerInterceptor的
postHandle
方法获取HttpServletResponse对象,到那时
HttpMessageConverter
已经序列化了响应。据我所知,你不会明白的。但是Rest控制器通知可以实现
ResponseBodyAdvice
,以便在
HttpMessageConverter
之前处理响应。Spring 4.3.x的文档。示例工作代码

型号

public class Sample {
    private String property;
    // getter and setter omitted    
}
休息控制器

@RestController
public class SampleController {

    @GetMapping
    public Sample get() {
        Sample s = new Sample();
        s.setProperty("Some Property");
        return s;
    }

}
休息控制器建议

@RestControllerAdvice
public class SampleAdvice implements ResponseBodyAdvice<Sample>{

    @Override
    public Sample beforeBodyWrite(Sample sample, MethodParameter arg1, MediaType arg2,
            Class<? extends HttpMessageConverter<?>> arg3, ServerHttpRequest arg4, ServerHttpResponse arg5) {
        // Get a handle to your response object and make changes here
        sample.setProperty("Overridden Property");
        return sample;
    }

    @Override
    public boolean supports(MethodParameter arg0, Class<? extends HttpMessageConverter<?>> arg1) {
        return true;
    }
}
@RestControllerAdvice
公共类SampleDevice实现ResponseByAdvice{
@凌驾
BodyWrite之前的公共示例(示例示例、方法参数arg1、媒体类型arg2、,
类>arg3,服务器HttpRequest arg4,服务器HttpResponse arg5){
//获取响应对象的句柄并在此处进行更改
sample.setProperty(“覆盖属性”);
返回样品;
}
@凌驾
公共布尔支持(方法参数arg0,类>arg1){
返回true;
}
}