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
0
投稿

猜你喜欢

  • 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
  • Java超详细讲解设计模式之一的单例模式

    2023-03-09 10:59:09
  • Spring Security认证机制源码层探究

    2022-07-27 19:05:26
  • SpringSecurity rememberme功能实现过程解析

    2021-12-20 05:22:08
  • java组件SmartUpload和FileUpload实现文件上传功能

    2022-02-02 17:08:17
  • sublime text3搭建配置c语言编译环境的详细图解教程(小白级)

    2021-12-16 09:18:27
  • 大前端代码重构之事件拦截iOS Flutter Vue示例分析

    2021-12-11 20:16:53
  • Java实现求二叉树的深度和宽度

    2022-01-11 18:38:41
  • Java8新特性:lambda表达式总结

    2023-11-29 00:16:52
  • 深入学习java枚举的应用

    2022-10-27 19:56:34
  • 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
  • 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
  • asp之家 软件编程 m.aspxhome.com