賀!此系列文榮獲 2023 iThome 鐵人賽《優選》獎項,正在規劃出書中,感謝大家的支持🙏,同名課程「Java 工程師必備!Spring Boot 零基礎入門」也已在 Hahow 平台上架
哈囉大家好,我是古古
在上一篇文章有先去介紹了 Json 格式,所以我們之後就可以使用 Json 格式,更簡單直覺的去呈現數據了
那麼接著這篇文章,我們就會回到 Spring Boot 程式中,來看一下要怎麼將 MyController 所回傳的值,改成是以 Json 的格式來返回
在上兩篇文章中,我們有添加了一個新的 product 方法,並且為他添加對應的 url 路徑 /product
,程式如下:
而我們在上一篇文章中,也有了解到可以將「第一個是蘋果,第二個是橘子」這個人類語言的字串,改成是以下列的 Json 格式來撰寫
{
"productList": ["蘋果", "橘子"]
}
所以接著這篇文章,我們會實際來修改 product 方法,將 「第一個是蘋果,第二個是橘子」的字串改成是上面的 Json 格式
如果想要將方法所返回的值,轉換成是 Json 格式 的話,會有兩個步驟:
@RestController
以下分別拆成兩點來介紹
@RestController
在 Spring Boot 程式中,只要在一個 class 上面加上了 @RestController
之後,就可以使該 class 成為一個 Bean、並且使該 class 中的 @RequestMapping
生效,最後是可以將返回值自動轉成 Json 格式了,因此在使用上可以說是非常的方便,一箭三鵰!
像是我們在 MyController class 中,就有加上 @RestController
,所以其實第一個步驟我們已經完成了,接著只要執行第二個步驟即可
只要提到 @RestController
,通常就會一起介紹另一個也很像的註解 @Controller
@Controller
和 @RestController
的用途有點類似,不過他們是有一些細微的差別的,以下是他們的共同點和差別:
共同點:都可以將 class 變成 Bean、也都可以將裡面的 @RequestMapping
生效
差別:
@Controller
:將方法的返回值自動轉換成 前端模板的名字
@RestController
:將方法的返回值自動轉換成 Json 格式
所以從上面幾點也可以看到,@Controller
和 @RestController
之間最大的差別,就是方法返回值的轉換不同而已
在以前的古老時代,通常都是用 @Controller
來選擇要返回的前端模板給使用者,不過隨著前後端分離的盛行、以及 Json 格式的崛起,因此目前大部分的程式都是使用 @RestController
來實作了
所以大家後續如果需要使用的話,建議優先使用 @RestController
來回傳 Json 格式,而 @Controller
則是有搭配 jsp、thymeleaf...等等這類的前端模板引擎時,再考慮去使用
了解了 @RestController
的用法,以及他和 @Controller
之間的差別之後,我們可以說回到「要怎麼將方法的返回值轉換成 Json 格式」這個原本的議題
除了在 MyController class 上面加上 @RestController
之外,下一步我們要做的,就是將方法的返回值,改成是一個「Java 中的物件」
這裡的運作邏輯是這樣的:Spring Boot 程式會將 Java class 中的變數,一一的去對應成 Json 格式中的 Key,而該 Key 的 value 值,就是 Java class 變數中所儲存的值
所以舉一個簡單的例子的話,假設我們有一個 Student 的 class,並且他裡面只有一個 String 類型的變數 name (以及其對應的 getter 和 setter)
public class Student {
private String name;
// getter 和 setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
而當我們在 MyController class 中,將這個 Student 的 class 當成返回值直接返回時,Spring Boot 程式到時候就會將 Student 這個 class 中的所有變數,一一轉換成 Json 的 key,然後將該變數的值轉換成對應的 value,最後就可以使用 Json 格式來呈現這個 Java class 中的數據了
所以同樣的邏輯,我們一樣是可以為「第一個是蘋果,第二個是橘子」,去創建一個專屬的 class,名字為 Store,並且該 class 中的程式如下:
public class Store {
public List<String> productList;
// getter 和 setter
public List<String> getProductList() {
return productList;
}
public void setProductList(List<String> productList) {
this.productList = productList;
}
}
接著,我們就可以透過一樣的邏輯,將 Store 這個 class 當成是返回值,並且在方法中「蘋果」和「橘子」這兩個值,塞到 Store class 中的 productList 裡面,這樣子到時候 Spring Boot 就會自動幫我們把這整個 Store 的 class,一口氣的去轉換成是 Json 格式了!因此結果就會如下圖所示
所以透過這樣子的寫法,我們將來就可以利用 Java class,將我們想要的數據存放在 Java class 中,最後再交由 Spring Boot 一口氣幫我們將該 Java class 轉換成是 Json 格式,這樣不僅可以達到簡潔傳遞數據的目的、同時也降低大家開發的複雜度了!
這篇文章先介紹了 @RestController
的用法,以及介紹了 @Controller
和 @RestController
之間的差別,最後也介紹了要如何透過 Java class 的寫法,讓 Spring Boot 程式一口氣幫我們將該 Java class 轉換成 Json 格式,方便我們進行開發和數據傳遞
那麼到這邊為止,我們算是了解了基本的 Spring MVC 的用法了,我們已經知道要如何使用 @RequestMapping
去進行 url 的路徑對應,以及要如何使用 @RestController
搭配 Java class 的返回值,將返回的數據改成是以 Json 的格式來呈現
那麼在大家對 Spring MVC 有一個初步的認識之後,接著下一篇文章,我們就會接著來介紹 Http 協議中的 http method 部分,介紹什麼是 GET 和 POST,並且要在什麼時機點去使用他們,那我們就下一篇文章見啦!