前言:

這些學習主要都是針對Mooc 上面的課程(Programming Cloud Service)所學到的一些部分.
雖然說同時在學習Golang跟Java 是有一些混亂的,能夠學習一下關於Java上面架設REST Server的方法有是挺有趣的.

第一個作業大綱與心得: 

這個課程的第一份作業其實相當的有趣,就是實作一個REST 的server可以查詢video info 還有就是能夠上傳video.
雖然相當有趣,但是其實讓我相當的苦惱.就是整個Controller的parameter到底該怎麼設計才能讓Retrofit  能夠正確的讀取與呼叫到.
其實如果Java或是Spring有點熟悉的人應該可以快速地完成第一次的作業.我卻也繳了不少時間當學費來好好學習整個架構與溝通的方法.

Spring Boot:

  • 簡介:

    • Spring Boot 可以快速的幫助你建立一個Java Based 的俱有REST 的Web Application.
  • 使用上的筆記:

    • 比較需要管理的只有兩個部分,一個是Application.java 另外一個是Controller.java .其中檔名可以改,但是需要有annotation 來表明清楚哪個是application 哪個是 controller.

    • 其中關於Controller裡面,重點是需要有 annotation 註名是 controller

      • @Controller
    • 相較於Java Serverlet 對於 Web Request 的處理上,Spring Boot 相對的簡單多了.不需要繼承 HttpServlet 然後去 overwrite doGet 跟 doPost,只需要在前端去註解出這個function 要對應到哪個http request.

      • @RequestMapping(value=“videos”, method=RequestMethod.POST)

      • 這個就是代表著 ,只要從http XXXXvideos的 POST request 都會轉到這個地方.

    • 對於去處理Http Request的部分,最麻煩了不外乎是處理 輸入與輸出的參數,而Spring Boot 可以很漂亮的做出這件事情.

      • @RequestBody/@ResponseBody

      • 這個會自動地把參數轉成你所要求的,不論是把Boolean轉成@ResponseBody(JSON的形態) 或是把@RequestBody轉成你所要求的變數形態.

    • 更改運作的port (change connection port) 官方提出兩個方法,不過我是第二個才成功

      • 新增 application.properties 在 src/main/resources/  並且加上 server.port = 9000

      • 在 Eclipse 的properties -> Run/Debug Settings -> Application -> Environment -> Add [SERVER_PORT] = 9000

    • 同時需要debug - Server 與 Client (test)

      • 先跑 Server - debug as Java Application (設定好break point)

      • 再接者跑test - debug as JUnit test

      • 在同時做 server  與 client debug 的時候,常常會有一個動作卡在 client 之後 server就沒回應.或是專心的看server的code,client 就停住了. 我會繼續研究看看.

    • 對於 /path/{id} 這一類型的RequestMapping 需要使用以下,不然會找不到:

    @RequestMapping(value=“/departments/{departmentId}”)
    </br>
    public String findDepatmentAlternative(@PathVariable(“departmentId”)String someDepartmentId)
    </br>{…
    }

    • 對於multipart 的敘述,一開始不是很了解會以為是POST的必須的API.回去看了關於Retrofit 的敘述才知道Multipart只針對檔案的上傳

      • 他在controller裡面對應的API是 @RequestParam(”data”) MultipartFile uploadFiles…
    • 其實在實作controller的時候,是不需要參考Retrofit 的API,那個API只是幫助你的test client 知道該怎麼跟server溝通.

    • 很多參數在Controller是可以基本帶入的:

      • HttpServletResponse 跟 HttpServletRequest 可以加入在parameter內然後看看有沒有呼叫到.
  • 參考:


Evan

Attitude is everything