RestTemplate及Response文件流問題


   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方法。

參考博文:https://blog.csdn.net/xixingzhe2/article/details/103129081?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM