Spring Boot项目@RestController使用重定向redirect方式
作者:EasonJim 发布时间:2023-12-11 15:21:56
标签:SpringBoot,@RestController,重定向,redirect
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


猜你喜欢
- WinForm中的键盘按键有KeyDown,KeyPress和KeyUp事件。那么它们的顺序以及区别在哪里呢?本文就此作出如下分析:一、顺序
- 在 C# 中反射技术应用广泛,至于什么是反射.........你如果不了解的话,请看下段说明,否则请跳过下段。广告一下:喜欢我文章的朋友请关
- 前言Spring框架对Bean进行装配提供了很灵活的方式,下面归纳一下主要的方式:在XML中进行显示配置在Java中进行显示配置隐式的bea
- 概述由于微信公众平台的特殊机制,所有的信息都由微信服务器转发而来,因此服务器是无法使用Session对用户会话的上下文进行管理的。为此Sen
- 正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。本文涉及
- 我们在使用SpringBoot进行测试的时候一般是需要加两个注解:@SpringBootTest目的是加载ApplicationContex
- 前端开发工程师和关注前端开发的开发者们在2015年中肯定被腾讯的JSSDk引爆过,搞APP的、搞前端的甚至是是搞后端的都跑过来凑热闹,一时之
- 重载:方法名相同,但参数不同的多个同名函数注意:1.参数不同的意思是参数类型、参数个数、参数顺序至少有一个不同2.返回值和异常以及访问修饰符
- 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 一、静态库和动态库的区别1. 静态函数库这类库的
- 一、ArrayList简介在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:ArrayList底层是一段连
- /// <summary> /// 队列多线程,T 代表处理的单个类型~&nbs
- 1.强引用( Strong Reference )最普遍的引用:Object obj=new Object()抛出OutOfMemoryEr
- 部分网友会发现Activity在切换到后台或布局从横屏LANDSCAPE切换到PORTRAIT,会重新切换Activity会触发一次onCr
- 本文实例为大家分享了Flutter Drawer抽屉菜单示例代码,供大家参考,具体内容如下一.Flutter Drawer组件简介1.源码查
- 前言之前其实有从鸿洋的文章有了解过AS的模板开发,一直想做一些自己经常使用的模板,以减少重复代码工作,但是发现太费劲了,所以一直搁置。然后昨
- Java 堆是用来存储对象实例的, 因此如果我们不断地创建对象, 并且保证 GC Root 和创建的对象之间有可达路径以免对象被垃圾回收,
- android Launcher3 设置默认桌面应用,供大家参考,具体内容如下launcher3 的默认桌面应用是在 res/xml里 默认
- 如果项目中使用到了MyBatis框架,那么使用通用Mapper和PageHelper分页插件将极大的简化我们的操作。通用Mapper可以简化
- 打jar包实现分离依赖lib和配置为了业务需要配置文件和jar分离,便于使用者修改配置信息,在网上找了很久,最终找到一个简单有效的方法。操作
- Android开发文档上专门有一小节解释这个问题。简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configurat