spring mvc
中是否有任何方法可以注册拦截器,以便在序列化之前输入RestController
返回值?
有点像@RestControllerAdvice
但是返回值。
我知道我可以绕过调用建议,但我认为应该有一些标准的方法来做到这一点。
postHandle
的HandlerInterceptor
方法获取HttpServletResponse对象,到那时HttpMessageConverter
已经序列化了响应。所以据我所知,你不会那样做。但Rest Controller Advice可以实现ResponseBodyAdvice
来处理HttpMessageConverter
之前的响应。 interceptors的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;
}
}