Spring Boot项目@RestController使用重定向redirect方式
作者:EasonJim 时间:2023-12-11 15:21:56
Spring Boot @RestController重定向redirect
Spring MVC项目中页面重定向一般使用return "redirect:/other/controller/";即可。而Spring Boot使用了@RestController注解,上述写法只能返回字符串
解决方法如下
将一个HttpServletResponse参数添加到处理程序方法然后调用response.sendRedirect("some-url");
@RestController
public class FooController {
@RequestMapping("/foo")
void handleFoo(HttpServletResponse response) throws IOException {
response.sendRedirect("some-url");
}
}
@RestController 注释下的重定向探讨
背景
在工作中遇到需要@RestController 内部的方法直接进行重定向或者转发
我们知道@RestController注解后,方法默认返回json。但是如果返回ModelAndView 则依然按ModelAndView曾经的逻辑走
那么springmvc内部的逻辑是如何走的呢?
HandlerMethodReturnValueHandlerComposite#selectHandler()
HandlerMethodReturnValueHandlerComposite#handleReturnValue()
ServletInvocableHandlerMethod#invokeAndHandle()
RequestMappingHandlerAdapter#invokeHandlerMethod()
RequestMappingHandlerAdapter#handleInternal()
AbstractHandlerMethodAdapter#handle()
DispatcherServlet#doDispatch()
DispatcherServlet#doService()
自下向上调用,最终通过依据返回参数和MethodParameter(方法参数的简述类) 得到使用何种HandlerMethodReturnValueHandler,当我们加上@RestController 如果方法返回ModelAndView 或者 View自然返回ModelAndViewMethodReturnValueHandler去处理,因此就解决了需要在@RestController注解下转发或重定向的问题。
下面是springmvc 默认的15种HandlerMethodReturnValueHandler
0 = {ModelAndViewMethodReturnValueHandler@7121}
1 = {ModelMethodProcessor@8372}
2 = {ViewMethodReturnValueHandler@8373}
3 = {ResponseBodyEmitterReturnValueHandler@8374}
4 = {StreamingResponseBodyReturnValueHandler@7125}
5 = {HttpEntityMethodProcessor@8375}
6 = {HttpHeadersReturnValueHandler@8376}
7 = {CallableMethodReturnValueHandler@8377}
8 = {DeferredResultMethodReturnValueHandler@8378}
9 = {AsyncTaskMethodReturnValueHandler@8379}
10 = {ModelAttributeMethodProcessor@8380}
11 = {RequestResponseBodyMethodProcessor@7132}
12 = {ViewNameMethodReturnValueHandler@8381}
13 = {MapMethodProcessor@8382}
14 = {ModelAttributeMethodProcessor@8383}
来源:https://www.cnblogs.com/EasonJim/p/7459486.html
标签:SpringBoot,@RestController,重定向,redirect
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Mybatis中注解@MapKey的使用详解
2023-11-24 21:43:35
代码从windows下visual studio到andriod平台迁移实现步骤
2022-05-23 11:21:39
浅谈Android Studio 3.0 的一些小变化
2022-12-23 10:27:56
![](https://img.aspxhome.com/file/2023/1/126691_0s.png)
Java超详细讲解设计模式之一的单例模式
2023-03-09 10:59:09
![](https://img.aspxhome.com/file/2023/6/101776_0s.png)
Spring Security认证机制源码层探究
2022-07-27 19:05:26
![](https://img.aspxhome.com/file/2023/1/68511_0s.png)
SpringSecurity rememberme功能实现过程解析
2021-12-20 05:22:08
![](https://img.aspxhome.com/file/2023/5/81965_0s.png)
java组件SmartUpload和FileUpload实现文件上传功能
2022-02-02 17:08:17
sublime text3搭建配置c语言编译环境的详细图解教程(小白级)
2021-12-16 09:18:27
![](https://img.aspxhome.com/file/2023/1/131621_0s.png)
大前端代码重构之事件拦截iOS Flutter Vue示例分析
2021-12-11 20:16:53
![](https://img.aspxhome.com/file/2023/0/133130_0s.jpg)
Java实现求二叉树的深度和宽度
2022-01-11 18:38:41
Java8新特性:lambda表达式总结
2023-11-29 00:16:52
深入学习java枚举的应用
2022-10-27 19:56:34
![](https://img.aspxhome.com/file/2023/7/122187_0s.png)
Java如果在try里面执行return还会不会执行finally
2022-03-01 18:16:28
JAVA用递归实现全排列算法的示例代码
2023-06-01 09:09:58
c# 可选参数、命名参数
2022-08-06 05:38:41
C/C++在Java、Android和Objective-C三大平台下实现混合编程
2022-01-04 16:58:08
![](https://img.aspxhome.com/file/2023/2/102612_0s.jpg)
Java jpa外连接查询join案例详解
2022-12-17 18:31:15
Android实现手机游戏隐藏虚拟按键
2023-01-29 02:04:55
C#灰度化图像的实例代码
2023-07-14 07:35:34
Android Handler 机制实现原理分析
2022-01-14 23:46:49
![](https://img.aspxhome.com/file/2023/1/91041_0s.jpg)