但我用的是@RestController
时间: 2023-07-19 11:13:19 浏览: 97
如果你的Controller是使用@RestController注解实现的,那么在拦截器中获取Controller返回的值的方式会有所不同。在这种情况下,我们可以通过ResponseBodyAdvice接口来获取Controller返回的值。
下面是一个示例代码,用于在拦截器中获取@RestController返回的值:
```java
public class CustomResponseBodyAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
// 获取RestController返回的值
System.out.println("RestController返回的值:" + body);
return body;
}
}
```
在上面的代码中,我们实现了ResponseBodyAdvice接口,并在beforeBodyWrite方法中获取了@RestController返回的值。需要注意的是,这种方式不仅适用于@RestController注解,也适用于其他返回值类型为@ResponseBody的Controller方法。
在使用这种方式获取Controller返回的值时,我们需要在Spring Boot的配置中注册CustomResponseBodyAdvice拦截器,示例代码如下:
```java
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册拦截器
registry.addInterceptor(new CustomInterceptor());
// 注册ResponseBodyAdvice拦截器
registry.addResponseBodyAdvice(new CustomResponseBodyAdvice());
}
}
```
在上面的代码中,我们通过addResponseBodyAdvice方法将CustomResponseBodyAdvice拦截器注册到Spring Boot的配置中,从而实现在拦截器中获取Controller返回的值的功能。
阅读全文