• 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;
    }
  • 相关阅读:
    springboot自定义jar打包不能导入到项目中
    ajax上传文件+传json数据
    cooladmin vitevue3 打包部署 nginx代理设置
    istio 安装
    logging
    orm 多对多
    shell 多线程
    舒服的jenkins子节点
    phpfpm coredump
    drf 自定义异常
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9204376.html
Copyright © 2020-2023  润新知