Spring Boot @RestController重定向redirect
Spring MVC项目中页面重定向一般使用return "redirect:/other/controller/";即可。而Spring Boot使用了@RestController注解,上述写法只能返回字符串
解决方法如下
将一个HttpServletResponse参数添加到处理程序方法然后调用response.sendRedirect("some-url");
1
2
3
4
5
6
7
|
@RestController
public class FooController {
@RequestMapping ( "/foo" )
void handleFoo(HttpServletResponse response) throws IOException {
response.sendRedirect( "some-url" );
}
}
|
@RestController 注释下的重定向探讨
背景
在工作中遇到需要@RestController 内部的方法直接进行重定向或者转发
我们知道@RestController注解后,方法默认返回json。但是如果返回ModelAndView 则依然按ModelAndView曾经的逻辑走
那么springmvc内部的逻辑是如何走的呢?
1
2
3
4
5
6
7
8
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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