關於SpringMVC content-type的那些事
最近專案上有一個小需求就是在form表單中上傳一個excel檔案,然後controller中對上傳的excel資料進行讀取然後執行dao操作
前端程式碼如下:
js程式碼:<div class="apply-r"> <a class="pure-button upload" style="text-decoration: none" href="#" onclick="$('#upid').click();" >匯入商品</a> <input id="upid" style="display:none;" class="up-file" type="file" name="files" onchange="fileChange(this);"/> </div>
後臺java程式碼:部分程式碼沒有貼出來,這裡我們只是進行關於Content-type的說明和介紹//批量上傳檔案 function fileChange(target) { if (target.files && target.files[0]) { var file = target.files[0]; target.value = ""; var filedata = new FormData(); filedata.append("multipartFile", file); doUpload(filedata); } } function doUpload(filedata) { console.log("doUpload"); $.ajax({ url: '#springUrl("/product/addBatch.do")', type: 'POST', data: filedata, async: false, cache: false, contentType: false, processData: false, success: function (result, status) { if (result.statusCode == 301) { $(".session-model").show(); return; } if (status == "success" && result.success) { showTips(result.message ? result.message : result.returnMessage); productList(1) } else { showTips(result.message ? result.message : result.returnMessage); } } }); }
@RequestMapping(value="/addBatch.do") @ResponseBody public AjaxResponse addBatch(HttpSession session, @RequestParam("multipartFile") MultipartFile multipartFile) { AjaxResponse ajaxResponse = new AjaxResponse(); try { String merchantId = ProcessSessionUser.getMember(session, CommonConstant.MEMBER_ID); //將匯入的文件的資料讀取出來 List<ProductInfo> productInfoList = ExcelToObjectConvert.excelConvertToDomain(multipartFile, merchantId); //進行插入到資料庫的操作 productManageService.addBatch(productInfoList); ProcessAjaxResponse.processResponse(true, ajaxResponse, null, ReturnCode.ADD_SUCCESS); } catch (Exception e) { logger.error("執行[addBatch]異常:", e); ExceptionConvert.convertException(ajaxResponse, e); } logger.info("返回web結果:{}", ajaxResponse); return ajaxResponse; }
以上前端和後端的程式碼在google IE11上正確執行通過,但是在IE9上又出現相容性問題。
然後前端同事將程式碼修改成如下方式:
<div class="apply-r">
<label>
<a class="pure-button upload" style="text-decoration: none" >匯入商品</a>
<form id="myForm" method="post" enctype="multipart/form-data">
<input type="file" id="upid" name="multipartFile" onchange="fileChange(this)" style="display:none"/>
</form>
</label>
</div>
前端js修改如下:
//批量上傳檔案
function fileChange(target) {
var option = {
url : '#springUrl("/product/addBatch.do")',
type: 'POST',
success : function(data) {
var objData = {};
if(data.indexOf('<pre>')>=0) {
objData = JSON.parse($(data).html());
} else{
objData = JSON.parse(data);
}
if (objData.statusCode == 301) {
$(".session-model").show();
return;
}
if (objData.success) {
showTips(objData.message ? objData.message : objData.returnMessage);
productList(1)
} else {
showTips(objData.message ? objData.message : objData.returnMessage);
}
},
error: function(data) {
//alert(data.)
},
resetForm : true
};
$("#myForm").ajaxSubmit(option);
return false;
}
這個時候在IE9的情況下,前端同事讓我返回一個文字格式的字串,但是字串的內容為一個JSON格式
之前在postman除錯下,後臺程式碼修改之前的可以看出action返回的content-type為application/json;charset=UTF-8
所以這個時候我們要將後臺程式碼返回的content-type修改成文字格式
這篇文章詳細說明了Springmvc下content-type,其中重點關注下RequestMapping的一些引數值
consumes: 指定處理請求的提交內容型別(Content-Type),例如application/json, text/html;
produces: 指定返回的內容型別,僅當request請求頭中的(Accept)型別中包含該指定型別才返回
當然關於Spring如何返回處理JSON或者XML格式的資料可以使用到matter,這裡我們先說下這種方法,上篇文章中可以看出要修改成 文字格式就要將content-type修改成 text/plain
常見的媒體格式型別如下:
- text/html : HTML格式
- text/plain :純文字格式
- text/xml : XML格式
- image/gif :gif圖片格式
- image/jpeg :jpg圖片格式
- image/png:png圖片格式
@RequestMapping(value="/addBatch.do",produces="text/plain;charset=utf-8")
@ResponseBody
public String addBatch(HttpSession session, @RequestParam("multipartFile") MultipartFile multipartFile) {
AjaxResponse ajaxResponse = new AjaxResponse();
try {
String merchantId = ProcessSessionUser.getMember(session, CommonConstant.MEMBER_ID);
List<ProductInfo> productInfoList = ExcelToObjectConvert.excelConvertToDomain(multipartFile, merchantId);
productManageService.addBatch(productInfoList);
ProcessAjaxResponse.processResponse(true, ajaxResponse, null, ReturnCode.ADD_SUCCESS);
} catch (Exception e) {
logger.error("執行[addBatch]異常:", e);
ExceptionConvert.convertException(ajaxResponse, e);
}
logger.info("返回web結果:{}", ajaxResponse);
return JSON.toJSONString(ajaxResponse);
}
produces處理的是返回值的資料格式 如果設定 produces="text/plain" 這樣返回的資料為亂碼
所以要設定 charset=utf-8
我們可以在postman下進行檢視
相關推薦
關於SpringMVC content-type的那些事
最近專案上有一個小需求就是在form表單中上傳一個excel檔案,然後controller中對上傳的excel資料進行讀取然後執行dao操作 前端程式碼如下: <div class="apply-r"> <a class="pure-button u
SpringMVC Content-Type解析
響應 為了測試方便,我們編寫了一個簡單的HttpMessageConverter package cn.bjut.converter; import java.io.IOException; import java.io.UnsupportedEnco
Http的那些事: Content-Type
article hba 數據 找不到 oschina dex ria ack null Content-Type 無疑是http中一個非常重要的屬性了, request 中可以存在, 也可以不存在( request的Content-Type 默認是 */*, 實際上呢, 如
http請求中content-type的那些事兒
在jquery+ajax盛行的年代裡,前後端互動實在太方便了,ajax發起一個請求就是這麼簡單 $.ajax({ url:'', type:'post', data:{},//引數 ... }) 久而久之,裡面很多的細節都被我們忽略了,等到有一天,沒有jque
springmvc+jsp中關於JQuery ajax提交的Content-Type引數設定application/json和application/x-www-form-urlencoded區別
介紹 本人頁面是用的JSP,後臺用的Spring MVC。 使用JQ的ajax需要設定Content-Type,Content-Type的設定有以下幾種常用的 "Content-Type": "application/x-www-form-urlencoded" // 適用於
springmvc controller動態設定content-type
springmvc RequestMappingHandlerAdapter#invokeHandlerMethod 通過ServletInvocableHandlerMethod#invokeAndHandle呼叫目標方法,並處理返回值。
想寫一些SpringMVC那些事
我是從大二開始學Java Web, 剛開始接觸的是Struts2, 可能是由於剛開始學MVC框架,很多東西搞得很不理解吧,最終放棄治療. 後來偶然的機會發現了SpringMVC, 然後就一發不可收拾了,深深的愛上它了, 它真的很棒, 簡單,功能強大,可拓展性好. 很早就有想寫一些和SpringMVC相
springmvc中@requestbody註解接收前端引數使用content-type型別
最近程式碼遇見了一個springmvc中的小問題,算是很基礎的東西,同事問我後我有有些迷惑上網找了一些資料後弄清楚了。特此記錄一下 首先是後臺程式碼使用springmvc註解@requestbody,
Servlet3.0與springmvc那些事
line pat 啟動tomcat api文檔 runtime lib 功能 反射 spring 官方文檔:https://docs.spring.io/spring/docs/5.0.2.RELEASE/spring-framework-reference/web.ht
發送get和post請求時常用的content-type
encode json數據格式 ima for www 下載 orm 文件上傳 服務器 常見的媒體格式類型如下: text/html : HTML格式 text/plain :純文本格式 text/xml : XML格式
哈夫曼編碼(Huffman coding)的那些事,(編碼技術介紹和程序實現)
信號 truct 依次 while 交換 需要 .text 示例 system 前言 哈夫曼編碼(Huffman coding)是一種可變長的前綴碼。哈夫曼編碼使用的算法是David A. Huffman還是在MIT的學生時提出的,並且在1952年發表了名為《
Android Studio 那些事|Activity文件前標識圖標顯示為 j 而是 c
div roi 右下角 ext blog 識圖 cti 問題: content 問題:Activity文件前標識圖標顯示為 j 而是 c 的圖標,或是沒有顯示,並且自己主動提示不提示 解決:這是由於你的studio設置了省電模式,你能夠通過 File>
軟件project—思考項目開發那些事(一)
app 爛代碼 fontsize 模式 大型 不明確 極限 後拋 con 閱讀文件夾: 1.背景2.項目管理,質量、度量、進度3.軟件開發是一種設計活動而不是建築活動4.高速開發(簡單的系統結構與復雜的業務模型)5.技術人員的業務理解與產品經理的業務理解的終於業務模型
常用對照表的參考_chapter-two(Content-Type)
接下來 adding 網頁服務器 發送請求 不一致 行修改 用戶信息 官網 頁面 HTTP狀態碼詳解 狀態碼含義 100 客戶端應當繼續發送請求。這個臨時響應是用來通知客戶端它的部分請求已經被服務器接收,且仍未被拒絕。客戶端應當繼續發送請求的剩余部
IPv4中的A,B,C類網及子網掩碼那些事
來看 了解 擁有 nbsp 開發 信息 alt 位或 其余 IP 地址的主要類型有五種 A B C D 和 E 一般 A B C 類地址更為常用 每類地址都是由 32 位或 4 個字節組成 A類地址: 在 A 類地址中第一個 8 位字節表示網絡部分 其余 3 個 8 位字節
JMETER content-type增加
multipart ava enc param ref blank files ima cat Jmeter—3 http請求—content-type與參數 本文講三種content-type以及在Jmeter中對應的參數輸入方式 第一部分:目前工作中涉及到的c
Kafka文件存儲機制那些事
kafka 方便 成對出現 讀者 開源項目 sock 位置 通過 刪除 點評一下先:kafka的存儲主要有幾個特點: 1. 多級索引(名義上是1級索引,但是這級索引依賴了文件列表,相當於文件列表是第一級索引,所以是二級索引),二級索引文件和數據文件一一對應。 相比只有1
關於代碼調試de那些事
左右 == 一次 done 推斷 編輯 有用 track 幾分鐘 原文出處:http://www.wklken.me/posts/2014/11/23/how-to-debug.html 關於代碼調試de那些事 1.你得明白你在做什麽, 保持清醒 2.想清楚了再寫代碼
我的項目管理那些事
機會 軟件設計 nio 需求 一段 領導 團隊 失業 證書 在2015年加入WD之前,準確的說,在2013-2015年我第一份工作的這段時間,我完全不知道自己工作是跟項目管理關系很大的。 2013碩士畢業後,以部門助理的身份開始第一份正式工作,每天的瑣事雜事很多、很亂,除了
關於System.Convert那些事
方法 osi system popu exception mes tox resource object 關於System.Convert那些事 前言 不知咋的,今天腰疼的不行,疼的站不起來了,今下午突然就疼起來了,唉,這是身體要垮了的節奏啊,再加上自己的