一開始啟動失敗,後來參考前輩的 code,發現關鍵點並做增補,就成功了!好有趣!
練習目標:做出一個 web service,用以接收 HTTP 的 GET request。
也就是在網頁 search bar 上輸入 http://localhost:8080/greeting 時可以顯示出一串 JSON 文字:
{"id":1,"content":"Hello, World!"}
再進一步,還可以藉著設定不同的參數而獲得不同的結果:
輸入:http://localhost:8080/greeting?name=User
輸出:{"id":1,"content":"Hello, User!"}
製作這項練習專案需要:
- 慣用的 IDE 或 text editor
- JDK 1.8 以上
- Maven 3.2 以上或 Gradle 4 以上
我所使用的是 Eclipse 2021-03 / JDK 1.8 / Maven 4.0.0
第一步:pom.xml
在 pom.xml 中,我們會定義所需的 Maven Dependencies,以往都是到 Maven Repository 網站一個一個搜尋,一個一個複製貼上。在這裡,直接使用官方的 Spring Initailizr,選擇需要的 Dependencies,點下 GENERATE,便會自動產出所需的專案包,內含設定好的 pom.xml,完全懶人不用自己慢慢抓!有夠方便!
附圖中的三個 dependencies 是我這次專案需要使用的,另外我目前還是使用 Java 8。
第二步:Model - Create a Resource Representation Class
前面有提到,在這個專案中,我們要呈現的結果是:
{
"id": 1,
"content": "Hello, World!"
}
其中有 id 和 content 兩個 field,在這一步,我們要先創建能夠呈現/包含它們的 class。
原文是說要 model 這個 representation,喜歡這個詞。
在這裡創建一個名為 Greeting 的 POJO class,
包含兩個 field、一個含參數的 constructor、兩個相應的 getter(原文稱其為 accessor)。
第三步:Controller - Create a Resource Controller
Controller 用來控制流程。
在這個專案中,我們希望進入 http://localhost:8080/greeting 時,能藉由 GET request 來獲得 JSON 資訊。
這個 Controller 會接收 HTTP GET request 的資訊,並傳回 Greeting 實例(instance)
@RestController 代表此類為 RestController,結合了 @Controller 及 @ResponseBody
@GetMapping("/url") 將針對該 url 的 HTTP GET request 與該方法 mapping 起來;意即 @RequestMapping(method = GET)
@RequestParam 用來將從 url 中接收的資料作為 parameter 傳給該方法
- value 即為 url 中的參數,在此案例中為 name(/greeting?name=ABC)
- defaultValue 代表,當在 url 中並未收到 name 的值時,會將 defaultValue 的值作為 parameter 傳給方法,在此案例中為 World
為了要傳回 Greeting 實例,我們會需要兩個參數:new Greeting(long id, String content),上方的 counter 及 template 便是為其預備。
- id 希望隨著存取次數而遞增,故傳入 counter.incrementAndGet() 給 建構式。
- content 希望有統一樣板,故先定義出 template,並在傳入建構式時使用 String.format(template, name),將從 method 接收到的 name 設定給 %s。
*web starter 會將所獲得的 Greeting instance 自動轉換成 JSON,顯示在畫面上😻
第四步:@SpringBootApplication
創建一個有 main() 的 class,作為程式進入點。
- 在 class 上方標註 @SpringBootApplication
- 在 main() 中使用 SpringApplication.run(ClassName.class, args)
- @Configuration
- @EnableAutoConfiguration
- @ComponentScan
*在此專案中,完全不需要撰寫任何其他的 xml,就連 web.xml 也不需要!
第五步:執行!
在 windows Maven 下,使用 cmd,切換到該專案資料夾,並輸入:
mvnw spring-boot:run
待執行完成後,保持 cmd 畫面開啟,到網頁輸入 http://localhost:8080/greeting 即可看到獲得的 JSON 字串!
***
傳統 MVC controller 與 RESTful web service controller 最關鍵的不同在於 response:
傳統 MVC 依賴 view(HTML etc)來呈現資料,
RESTful web service 則是直接回傳 Greeting object,其物件資料會直接被轉成 JSON 寫進 HTTP response 裡。
留言
張貼留言