原文地址: SpringBoot系列教程web篇之重定向java
前面介紹了spring web篇數據返回的幾種經常使用姿式,當咱們在相應一個http請求時,除了直接返回數據以外,還有另外一種常見的case -> 重定向;git
好比咱們在逛淘寶,沒有登陸就點擊購買時,會跳轉到登陸界面,這其實就是一個重定向。本文主要介紹對於後端而言,能夠怎樣支持302重定向github
<!-- more -->web
首先得搭建一個web應用纔有可能繼續後續的測試,藉助SpringBoot搭建一個web應用屬於比較簡單的活;spring
建立一個maven項目,pom文件以下json
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.7</version> <relativePath/> <!-- lookup parent from update --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.45</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </pluginManagement> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
依然是通常的流程,pom依賴搞定以後,寫一個程序入口後端
/** * Created by @author yihui in 15:26 19/9/13. */ @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class); } }
這種case一般適用於返回視圖的接口,在返回的字符串前面添加redirect:
方式來告訴Spring框架,須要作302重定向處理瀏覽器
@Controller @RequestMapping(path = "redirect") public class RedirectRest { @ResponseBody @GetMapping(path = "index") public String index(HttpServletRequest request) { return "重定向訪問! " + JSON.toJSONString(request.getParameterMap()); } @GetMapping(path = "r1") public String r1() { return "redirect:/redirect/index?base=r1"; } }
上面給出了一個簡單的demo,當咱們訪問/redirect/r1
時,會重定向到請求/redirect/index?base=r1
,實際測試結果以下服務器
注意上面的截圖,咱們實際訪問的鏈接是 http://127.0.0.1:8080/redirect/index?base=r1
,在瀏覽器中的表現則是請求url變成了http://127.0.0.1:8080/redirect/index?base=r1
;經過控制檯查看到的返回頭狀態碼是302websocket
說明
@ResponseBody
註解,不然返回的字符串被當成普通字符串處理直接返回,並不會實現重定向前面一篇說到SpringMVC返回數據的時候,介紹到能夠直接經過HttpServletResponse
往輸出流中寫數據的方式,來返回結果;咱們這裏也是利用它,來實現重定向
@ResponseBody @GetMapping(path = "r2") public void r2(HttpServletResponse response) throws IOException { response.sendRedirect("/redirect/index?base=r2"); }
從上面的demo中,也能夠看出這個的使用方式很簡單了,直接調用javax.servlet.http.HttpServletResponse#sendRedirect
,並傳入須要重定向的url便可
這裏主要介紹了兩種常見的後端重定向方式,都比較簡單,這兩種方式也有本身的適用場景(固然並不絕對)
redirect
的方式,更加適用於視圖的跳轉,從一個網頁跳轉到另外一個網頁HttpServletResponse#sendRedirec
的方式更加靈活,能夠在後端接收一次http請求生命週期中的任何一個階段來使用,好比有如下幾種常見的場景
盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
下面一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛