软件编程
位置:首页>> 软件编程>> java编程>> Spring Boot项目@RestController使用重定向redirect方式

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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com