SpringBoot之Controller基礎入門使用
@Controller 處理http請求@RestController Spring4之後新加的註解,原來返回json需要@ResponseBody配合@Controller@RequestMapping 配置url對映@PathVariable 獲取url中的資料@RequestParam 獲取請求引數中的值
1. 前言
專案前後臺互動的話 無非兩種方式
一種普通整體頁面提交,比如form提交;
還有一種區域性重新整理,或者叫做非同步重新整理,ajax提交;
@Controller就是整體頁面重新整理提交的處理註解
@RestController就是ajax提交,一般返回json格式,相當於我們經常使用的@ResponseBody配合@Controller組合
2 .編碼
這裡我們分別來演示上面兩種互動。請求後臺,必須返回一個檢視,以前我們一般用Jsp,但是SpringBoot不推薦我們使用jsp,主要是強調前後臺分離;官方推薦的是這幾種模版檢視引擎,我一般推薦Freemarker和Velocity;
新增freemarker支援,在pom.xml檔案新增對應的依賴
<dependency>
< groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
然後我們在Controller包下新建一個新的Controller類 HelloWorldFreemakerController
package com.jd.controller; import org.springframework.stereotype.Controller; importorg.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; /** * Created by Administrator on 2018/6/24. */ "/freemarker") (public class HelloWorldFreemakerController { /** * 設定資料,返回到freemarker檢視 * @return */ "/say") ( public ModelAndView say(){ ModelAndView mav=new ModelAndView(); mav.addObject("message", "SpringBoot 大爺你好!"); mav.setViewName("helloWorld"); return mav; } }
對應的,我們在templates下新建一個helloWorld.ftl模版檔案(Freemaker的字尾問ftl)
<html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> show:${message} </body> </html>
我們測試下,啟動SpringbootDemoApplication
然後瀏覽器輸入:http://localhost:8888/HelloWorld/freemarker/say
頁面顯示結果:
我們新建一個HelloWorldAjaxController類
package com.jd.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 返回ajax json格式 * @author user * */ "/ajax") (public class HelloWorldAjaxController { "/hello") ( public String say(){ return "{'message1': 'SpringBoot你大爺','message2','SpringBoot你大爺2'}"; } }
返回json串
這裡我們用的是jquery,隨便找個jquery.js進行引用,這個jquery ajax的使用一定要熟練我這裡就不說了
index.html程式碼,一個ajax請求
<html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script src="jQuery.js"></script> <!--自己找一個jquery,線上的也可以--> <script type="text/javascript"> function show(){ $.post("ajax/hello",{}, function(result){ alert(result); } ); } </script> </head> <body> <button onclick="show()">你大爺</button> </body> </html>
啟動HelloWorldApplication類
頁面先請求index.html
瀏覽器輸入:
當然還有一些比如
@PathVariable 獲取url中的資料,獲取路徑中的值
@RequestParam 獲取請求引數中的值
簡單的寫個例子,瞭解一下即可
package com.jd.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; "/blog") (public class BlogController { /** * @PathVariable 配合 @RequestMapping使用可以獲取到路徑中的引數 * http://localhost:8888/HelloWorld/blog/21 則 id=21 * @param id * @return */ ("/{id}") public ModelAndView show( ("id") Integer id){ ModelAndView mav=new ModelAndView(); mav.addObject("id", id); mav.setViewName("blog"); return mav; } /** * RequestParam 獲取提交的引數 * * http://localhost:8888/HelloWorld/blog/query?q=123456 則q = 123456 * @param q * @return */ ("/query") public ModelAndView query( (value="q",required=false)String q){ ModelAndView mav=new ModelAndView(); mav.addObject("q", q); mav.setViewName("query"); return mav; } }