1.情景還原
使用struts2寫的接口(服務端),要求對方(客戶端)以json格式傳輸數據,但是使用request.getParameter()獲取不到
2.問題剖析
application/x- www-form-urlencoded是Post請求默認的請求體內容類型,也是form表單默認的類型,可以使用request.getParameter()方法來獲取請求參數值;
但是,當請求內容不是該類型時,就不能使用request.getParameter()方法來獲取請求參數值了,具體如下:
當請求體內容為application/json類型時,需使用request.getReader()方法來獲取請求內容值(字符流),經測試也可以使用字節流來獲取;
當請求體內容為multipart/form-data類型時,需使用request.getInputStream()方法來獲取請求內容值(字節流)。
3.解決方案
所需jar包
struts2-core-2.3.34.jar;
導入
import java.io.BufferedReader; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext;
/** * 獲取接口傳遞的JSON數據 * @explain * @param request HttpServletRequest對象 * @return JSON格式數據 */ public static JSONObject getJsonReqData () { // 獲取Request對象 HttpServletRequest request = ServletActionContext.getRequest(); StringBuffer sb = new StringBuffer(); try { // json格式字符串 String jsonStr = ""; // 獲取application/json格式數據,返回字符流 BufferedReader reader = request.getReader(); // 對字符流進行解析 while ((jsonStr = reader.readLine()) != null) { sb.append(jsonStr); } } catch (IOException e) { e.printStackTrace(); } // 將json字符串(jsonStr)-->json對象(JSONObject) JSONObject jo = JSONObject.fromObject(sb.toString()); return jo; }
