主動寫入流對@ResponseBody註解的影響
來源:京東雲開發者
一、問題回溯
2023年Q2某日運營反饋一個問題,商品系統商家中心某批次工具模板無法下載,導致功能無法使用(因為模板是動態變化的)
{"code":-1,"msg":"失敗"}
/** * 模板下載 */@RequestMapping("/doBatchWareSetAd")public void doBatchWareSetAd(@RequestParam MultipartFile file, HttpServletResponse response) { wareBatchBusiness.doBatchWareSetAd(file, response, getLongOrgCode(), getCurrentUserPin(), getCurrentUserId());}
/** * 模板下載 */@RequestMapping("/doBatchWareSetAdDemo")@ResponseBodypublic Map<String, Object> doBatchWareSetAd(@RequestParam MultipartFile file, HttpServletResponse response) { return wareBatchBusiness.doBatchWareSetAd(file, response, getLongOrgCode(), getCurrentUserPin(), getCurrentUserId());}
"/test1") (
public Map<String, String> test1(HttpServletResponse response) {
Map<String, String> map = new HashMap<>();
map.put("1", "1");
return map;
}
// 響應
JSON報文
"/test2") (
public Map<String, String> test2(HttpServletResponse response) throws IOException {
Map<String, String> map = new HashMap<>();
map.put("1", "1");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", String.format(
"attachment; filename=%s_%s.xls", "Demo", System.currentTimeMillis()));
OutputStream out = response.getOutputStream();
out.flush();
out.close();
return map;
}
// 響應
提示下載檔案
我們要相信自己的程式碼,至少是要相信已經經過測試的程式碼。 在委託他人或者自己配置環境引數,如許可權、ZK等每次都保證預釋出和線上同時配置,避免遺漏的情況。
啟發:
聊了這麼多,那我們這種類似場景的程式碼應該怎麼寫?
既然主動寫入流會解除@ResponseBody的作用,反之又能發揮它的作用,那我們最佳方案是不是如下所示?
"/test1") (
public Map<String, String> test1(HttpServletResponse response) {
Map<String, String> map = new HashMap();
if (獲取不到檔案配置 == true) {
return map.put("msg", "獲取不到檔案配置");
}
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", String.format(
"attachment; filename=%s_%s.xls", "Demo", System.currentTimeMillis()));
OutputStream out = response.getOutputStream();
out.flush();
out.close();
return map;
}
如此一來,當發生預期之外的情況,我們有非常明顯的報錯提示,當正常時又可以完美實現功能,妙哉(我覺得)~
-end-
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70027824/viewspace-3000237/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- @ResponseBody註解的作用
- @responseBody註解的使用
- @ResponseBody註解和@RequestBody註解使用
- SpringMVC的@ResponseBody註解說明SpringMVC
- SpringMVC:@ResponseBody註解與HttpServletResponse物件SpringMVCHTTPServlet物件
- FTP主動模式和被動模式(2)- 防火牆對FTP的影響 ASPFFTP模式防火牆
- 修改主機時區對Oracle的影響分析Oracle
- 浮動的盒子對img的影響
- @RequestParam,@RequestBody,@ResponseBody,@PathVariable註解的一點小總結
- 虛擬主機對網站有哪些影響?網站
- Spring @Autowired 註解自動注入流程是怎麼樣?Spring
- CSS3實現動畫不會影響主執行緒,JS實現動畫會影響主執行緒CSSS3動畫執行緒JS
- 好程式設計師Java分享SpringMVC之@ResponseBody註解程式設計師JavaSpringMVC
- 🚀🚀🚀Elasticsearch 主副分片切換過程中對業務寫入有影響嗎Elasticsearch
- [20220105]建立非唯一主鍵對效能有影響嗎.txt
- unusable index對DML/QUERY的影響Index
- Nologging對恢復的影響(二)
- 語言對思維的影響
- Nologging對恢復的影響(一)
- 雲主機的速度受到什麼影響?
- 網線的分類與對網速的影響 網線對網速影響大嗎?
- 香港主機對seo網站最佳化有什麼影響?網站
- SNE:全球晶片短缺對電動汽車市場的影響晶片
- 感覺主頁設計受ThinkPHP主頁的影響很大PHP
- 來電對播放音樂的影響
- python:super()對多繼承的影響Python繼承
- DB2 HADR對效能的影響DB2
- INDEX建立方式對SQL的影響IndexSQL
- 關於OPcache對Swoole影響的理解opcache
- Linux讀寫執行許可權對目錄和檔案的影響Linux
- SpringMVC原始碼剖析5:訊息轉換器HttpMessageConverter與@ResponseBody註解SpringMVC原始碼HTTP
- 深度剖析新型冠狀病毒對全球移動經濟的影響
- 瞭解 ignore_above 引數對 Elasticsearch 中磁碟使用的影響Elasticsearch
- VPS主機如何影響頁面速度
- 網站名稱改動對SEO有什麼影響?網站
- 終端環境對go程式的影響?Go
- margin為負值對佈局的影響
- Sailthru:Facebook醜聞對人們的影響AI