Spring中有很多注解,如RequestParam,PathVarible,SesstionAttribute,這些在開發是多嘗試一下,可能用得到,ModelAttribute用的還挺多,可以以此為例,探究一下Springmvc中注解
----------------2019/10/9-----在公司使用寫了兩個微服務,總結一下-------
1.文件流作為一種特殊的數據格式,不能和普通的json對象一樣返回。那么返回文件流通常有兩種方法A.直接返回FileSystemResource,B.使用HttpServletResponse作為輸出流,向里面寫入數據。兩種方法各有優點,A簡單,但是應為返回的是FileSystemResource,所以在方法返回前會一直占用File對象,無法在方法中進行刪除文件操作。B方法稍微瑣碎一點,但是可以在把文件流寫入網絡后,對磁盤上的文件進行操作,靈活性更強。
同時,作為返回文件流,在異常情況下是很難返回自定義的具體錯誤信息的。應為返回自定義錯誤信息httpstatus也是200,和文件流的正確情況無法區分。所以想要具體的錯誤信息,一般要分離一個接口,就是查詢文件的狀態,當確定文件資源存在時,調用獲取文件借口獲取。同時使用outputStream時,就無法寫入狀態碼。
2.控制器異常處理。首先我們服務里自定義的異常都本是HttpStatus=200,否則我們無法返回錯誤信息。區分HttpStatus和我們自定義的狀態碼。這兩個其實什么關系都沒有,不應該搞混。可能HttpStatus中返回200,但是我們自定義的卻返回404。設置HttpStatus可以使用ResponseEntity或者Response對象。雖然有spring中有ExceptionHandler,但是並不好用。
3.RestTemplate的getForEntity(url,String.class,param)和postEntity(url,param,Resource.class)的方法中參數沒有傳過去的問題。其實看《Spring in Action》,其實還是要對參數進行二次封裝。get方法使用url+param,post方法中使用MutltipartValue(針對resource情況)。
------------------------2020---------------
controller中的@RequestBody中使用List<String>,Map<String,Object>可以自動轉換為Json。RestTemplate中get方法不能使用Header,要使用exchange方法。