Spring Boot項目@RestController使用重定向redirect方式
Spring Boot @RestController重定向redirect
Spring MVC項目中頁面重定向一般使用return "redirect:/other/controller/";即可。而Spring Boot使用了@RestController注解,上述寫法只能返回字符串
解決方法如下
將一個HttpServletResponse參數(shù)添加到處理程序方法然后調(diào)用response.sendRedirect("some-url");
@RestController public class FooController { @RequestMapping("/foo") void handleFoo(HttpServletResponse response) throws IOException { response.sendRedirect("some-url"); } }
@RestController 注釋下的重定向探討
背景
在工作中遇到需要@RestController 內(nèi)部的方法直接進行重定向或者轉(zhuǎn)發(fā)
我們知道@RestController注解后,方法默認(rèn)返回json。但是如果返回ModelAndView 則依然按ModelAndView曾經(jīng)的邏輯走
那么springmvc內(nèi)部的邏輯是如何走的呢?
HandlerMethodReturnValueHandlerComposite#selectHandler() HandlerMethodReturnValueHandlerComposite#handleReturnValue() ServletInvocableHandlerMethod#invokeAndHandle() RequestMappingHandlerAdapter#invokeHandlerMethod() RequestMappingHandlerAdapter#handleInternal() AbstractHandlerMethodAdapter#handle() DispatcherServlet#doDispatch() DispatcherServlet#doService()
自下向上調(diào)用,最終通過依據(jù)返回參數(shù)和MethodParameter(方法參數(shù)的簡述類) 得到使用何種HandlerMethodReturnValueHandler,當(dāng)我們加上@RestController 如果方法返回ModelAndView 或者 View自然返回ModelAndViewMethodReturnValueHandler去處理,因此就解決了需要在@RestController注解下轉(zhuǎn)發(fā)或重定向的問題。
下面是springmvc 默認(rèn)的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}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
PowerJob LockService方法工作流程源碼解讀
這篇文章主要為大家介紹了PowerJob LockService方法工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01java實現(xiàn)Socket通信之單線程服務(wù)
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)Socket通信的單線程服務(wù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07使用Flyway進行Java數(shù)據(jù)庫版本控制的操作指南
今天我們將深入探討如何使用Flyway進行Java數(shù)據(jù)庫版本控制,Flyway是一個流行的數(shù)據(jù)庫遷移工具,用于管理和自動化數(shù)據(jù)庫模式的演變,文中通過代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-07-07Maven項目在new module后,pom文件顯示為Ignored pom.xml問題
在Maven項目中,若創(chuàng)建過同名module后刪除,再次創(chuàng)建時可能導(dǎo)致pom.xml文件被IDEA忽略,原因是IDEA保留了之前module的痕跡,導(dǎo)致重建時將其視為已刪除的module,解決方法是進入IDEA設(shè)置,找到Maven的Ignored Files設(shè)置2024-09-09mybatis plus動態(tài)數(shù)據(jù)源切換及查詢過程淺析
這篇文章主要介紹了mybatis plus動態(tài)數(shù)據(jù)源切換及查詢過程淺析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12SpringSecurity HttpSecurity 類處理流程分析
SpringSecurity在SSM項目中使用基于配置文件,通過XML標(biāo)簽定義認(rèn)證信息,HttpSecurity在SpringBoot中通過代碼配置實現(xiàn)與XML相同功能,詳細(xì)介紹了HttpSecurity的類結(jié)構(gòu)、處理過程及其與SecurityBuilder的關(guān)系,感興趣的朋友一起看看吧2024-09-09關(guān)于Spring注解@Async引發(fā)其他注解失效的解決
這篇文章主要介紹了關(guān)于Spring注解@Async引發(fā)其他注解失效的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03SpringSecurity實現(xiàn)登陸認(rèn)證并返回token方式
這篇文章主要介紹了SpringSecurity實現(xiàn)登陸認(rèn)證并返回token方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03