spring boot 拦截器获取controller返回的数据_@RestController vs @Controller
时间: 2023-08-03 07:55:53 浏览: 76
在Spring Boot中,拦截器可以用于在请求到达Controller之前或之后执行某些操作。无论是@RestController还是@Controller,拦截器都可以获取到Controller的返回值。
但是,对于@RestController和@Controller的区别,需要注意以下两点:
1.返回值类型不同
- @RestController注解的Controller方法返回的是JSON/XML等数据,适用于API接口的开发。
- @Controller注解的Controller方法返回的是视图(View),适用于Web页面的开发。
2.@RestController注解相当于@ResponseBody + @Controller
- @RestController注解会自动将Controller方法返回的数据转换为JSON/XML等格式的数据,并将其输出到响应体中,不需要使用@ResponseBody注解。
- @Controller注解需要使用@ResponseBody注解才能将数据输出到响应体中。
因此,在拦截器中获取Controller返回值时,需要根据Controller的注解类型进行不同的处理。如果是@RestController,直接获取响应体中的数据即可;如果是@Controller,则需要获取ModelAndView对象并从中获取数据。
相关问题
返回值posthandle中获取response返回的值_Springboot拦截器获取@Response的返回值
在 Spring Boot 中,可以使用拦截器(Interceptor)来对请求进行拦截和处理。与 Spring MVC 类似,拦截器可以在请求被处理前或处理后对其进行拦截,并进行一些处理。
如果需要在拦截器中获取 Controller 返回的响应结果,可以使用 Spring 提供的 postHandle 方法。该方法会在 Controller 方法执行完成后被调用,可以获取到 Controller 方法返回的 ModelAndView 对象或直接返回的值。
在 postHandle 方法中,可以通过将 HttpServletResponse 对象转换为 HttpServletResponseWrapper 对象,从而获取到返回给客户端的响应内容。示例代码如下:
```
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 判断是否有返回结果
if (response instanceof HttpServletResponseWrapper) {
// 将 response 转换为 HttpServletResponseWrapper 对象
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(response);
// 获取响应内容
String content = wrapper.getResponse().getContentAsString();
// 进行处理
}
}
```
需要注意的是,如果 Controller 方法中使用了 @ResponseBody 注解或返回值为 ResponseEntity 类型,那么拦截器中获取到的响应内容将是序列化后的 JSON 字符串,而非原始的字符串。此时需要使用 JSON 解析库对响应内容进行解析。
spring boot拦截器过滤器
Spring Boot中的拦截器和过滤器有一些区别。拦截器是Spring MVC自带的,不依赖于servlet容器,而过滤器依赖于servlet容器。拦截器是基于Java的反射机制,而过滤器是基于函数的回调。拦截器只能对action请求起作用,而过滤器可以对几乎所有的请求起作用。拦截器可以获取IOC容器中的bean,而过滤器不可以。拦截器是由Spring MVC提供的,可以在Controller中访问服务层。而过滤器是JavaEE标准,只需依赖servlet API,不需要依赖Spring。在Spring Boot中配置拦截器可以使用@WebFilter注解,并在启动类中加上@ServletComponentScan注解指定扫描的包。\[1\]\[2\]\[3\]
#### 引用[.reference_title]
- *1* [Springboot--拦截器、过滤器 区别,作用,实现方法](https://blog.csdn.net/Dark_AK44/article/details/123746613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [springboot过滤器和拦截器](https://blog.csdn.net/qq_42076204/article/details/125215984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]