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

问题描述 投票:0回答:1

spring mvc中是否有任何方法可以注册拦截器,以便在序列化之前输入RestController返回值?

有点像@RestControllerAdvice但是返回值。

我知道我可以绕过调用建议,但我认为应该有一些标准的方法来做到这一点。

java spring-mvc interceptor spring-restcontroller
1个回答
1
投票

postHandleHandlerInterceptor方法获取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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.