iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0

第17天,沿用昨日使用到的樣板文件,以及PageController進行業務邏輯的撰寫,為了方便測試會開始使用Postman工具,模擬網站發送請求,開始會先來做Form表單知識補充,接著會介紹到Form表單跟接收JSON請求的實作方式

Form表單傳輸知識

雖然透過查詢字串,可以滿足資料傳遞的伺服器的需求,但瀏覽器也會保存網站請求的查詢字串,如果帳號密碼出現在瀏覽紀錄中,會有機密資料外漏的隱憂,因此需要透過另一種方式,將資料打包發送給伺服器,確保資料不會出現在不該出現的地方

透過表單提交的方式,能讓客戶端向伺服器請求資源時,另外攜帶其他資料給伺服器進行相關處理,常見的Form有下列兩種請求方式

Multipart/form-data
這種傳輸方式的特性是,會將資料切割成多個部分並放在Header中,因此才會稱作MultiPart,可以夾帶的資料格式,包含了二進制(檔案)內容以及純文字資料,每個Part除了實際資料外,還包含了資料類型、表單欄位名稱及檔案名稱

application/x-www-form-urlencoded
屬於URL編碼格式的資料,與Multipart的差異在於,資料與請求一起發送,只有欄位名稱與實際數值,沒有夾帶其他資訊,適用簡易資料上傳場景

Form表單跳轉,並帶入資料到樣板中

在控制器添加新的請求方法

@PostMapping("/test/form")
public ModelAndView testForm(
        @RequestParam("text") String text) {
    Map<String, String> data = new HashMap<>();
    data.put("text", text);
    // 透過 ModelAndView 綁定資料到View中
    return new ModelAndView("form", data);
}

打開 home.html,並新增下列內容

<body>
    <h1>Form發送的資料:<a th:text="${text}"></a></h1>
</body>

實際測試結果

https://ithelp.ithome.com.tw/upload/images/20230930/2016192026h2BiMk38.png

RestController 開發第一個Spring Boot API

現在介紹另一個資源請求格式「JSON」的實作,通常是以WebAPI為主,這個範例改用另一個控制器註釋 RestController 進行實作,首先在controllers下新建一個 ApiController

開始前,先來了解客戶端存放資料的位置

路由參數: 即請求網址定義好的路由參數
查詢字串: 就是Query String
Header: 請求標頭
Reqeust Body: 客戶端攜帶的資料如:Form、JSON Data

這次利用JSON Data進行實作

首先定義負責接收客戶端請求的DTO

class StudentDto {
    public String name;
    public String alias; // 別名
}

在控制器新建API請求方法

@RestController
@RequestMapping(path = "/api")
public class ApiController {
    @PostMapping("/test/{classRoom}")
    public Map testApi(
            // 解析Json送過來的資料,並注入 student 屬性中
            @RequestBody StudentDto student,
            // 路徑參數
            @PathVariable("classRoom") String classRoom,
            // 解析查詢字串 teacherName
            @RequestParam String teacherName) {

        // 建立Map物件,保留Json回傳資料
        Map<String, Object> responseData = new HashMap<>();
        responseData.put("teacherName", teacherName);
        responseData.put("classRoom", classRoom);
        responseData.put("student", student);

        return responseData;
    }
}

這個API請求實現了取得查詢字串、路徑參數以及Json資料,並透過Map另外組裝成另外要響應的資料格式,現在實際使用Postman發送請求,檢視回傳的資料內容
https://ithelp.ithome.com.tw/upload/images/20230930/201619205eEfXy8hJ8.png

回傳結果如預期回傳班級名稱、班導師名稱以及學生基本資料,以上內容是取得客戶端請求資料,由伺服器接收到並進行處理的範例做法,現在有了API那麼少不了必須要有資料庫操作,下一篇會介紹MyBatis的配置及基本操作


上一篇
第16日 控制器做第一個請求頁面
下一篇
第18日 用MyBatis來做CRUD
系列文
掌握Java神器,駕馭SpringBoot猛獸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言