天天看點

struts2 接口如何接收用戶端送出的json資料

1.情景還原

  使用struts2寫的接口(服務端),要求對方(用戶端)以json格式傳輸資料,但是使用request.getParameter()擷取不到

2.問題剖析

  application/x- www-form-urlencoded是Post請求預設的請求體内容類型,也是form表單預設的類型,可以使用request.getParameter()方法來擷取請求參數值;

但是,當請求内容不是該類型時,就不能使用request.getParameter()方法來擷取請求參數值了,具體如下:

當請求體内容為application/json類型時,需使用request.getReader()方法來擷取請求内容值(字元流);

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;
}