Spring Boot @RestController重定向redirect
Spring MVC項(xiàng)目中頁(yè)面重定向一般使用return "redirect:/other/controller/";即可。而Spring Boot使用了@RestController注解,上述寫法只能返回字符串
解決方法如下
將一個(gè)HttpServletResponse參數(shù)添加到處理程序方法然后調(diào)用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 內(nèi)部的方法直接進(jìn)行重定向或者轉(zhuǎn)發(fā)
我們知道@RestController注解后,方法默認(rèn)返回json。但是如果返回ModelAndView 則依然按ModelAndView曾經(jīng)的邏輯走
那么springmvc內(nèi)部的邏輯是如何走的呢?
1
2
3
4
5
6
7
8
|
HandlerMethodReturnValueHandlerComposite#selectHandler() HandlerMethodReturnValueHandlerComposite#handleReturnValue() ServletInvocableHandlerMethod#invokeAndHandle() RequestMappingHandlerAdapter#invokeHandlerMethod() RequestMappingHandlerAdapter#handleInternal() AbstractHandlerMethodAdapter#handle() DispatcherServlet#doDispatch() DispatcherServlet#doService() |
自下向上調(diào)用,最終通過(guò)依據(jù)返回參數(shù)和MethodParameter(方法參數(shù)的簡(jiǎn)述類) 得到使用何種HandlerMethodReturnValueHandler,當(dāng)我們加上@RestController 如果方法返回ModelAndView 或者 View自然返回ModelAndViewMethodReturnValueHandler去處理,因此就解決了需要在@RestController注解下轉(zhuǎn)發(fā)或重定向的問(wèn)題。
下面是springmvc 默認(rèn)的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 } |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://www.cnblogs.com/EasonJim/p/7459486.html