struts2 接口如何接收客户端提交的json数据

Posted Marydon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2 接口如何接收客户端提交的json数据相关的知识,希望对你有一定的参考价值。

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

 

以上是关于struts2 接口如何接收客户端提交的json数据的主要内容,如果未能解决你的问题,请参考以下文章

Struts2中如何接收另一个action 或者JSP页面经过POST方法传过来的字符串

Struts2 Action接收POST请求JSON数据及其实现解析

PHP如何接收json数据

如何通过 POST (Ajax) 发送 JSON 数据并从 Struts 2 操作接收 JSON 响应

.net mvc服务端怎么接收客户端的发送的json数据?

php中 curl模拟post发送json并接收json(转)