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;
}
}