当前位置: 首页 > 知识库问答 >
问题:

如何在java中修改HttpServletRequest正文?

江煜
2023-03-14

我想在请求正文到达Http Servlet并获得processed.The请求正文的JSON有效负载如下所示,我想摆脱“PayamtChqmanViewObject”(详细信息)部分。

{
      "ChqAccCode": "1",
      "ChqAmt": 1,
      "ChqBankCompCode": "TEST",
      "ChqBchName": "TEST",
      "ChqBchPost": "Y",
      "ChqPostDate":"2020-08-14",
      "ChqCompCode": "TEST",
      "ChqDate": "2020-04-21",
      "ChqDeptCode": "0",
      "ChqDesc": "TEST",
      "ChqDraftCode": "M",
      "ChqJobCode": null,
      "ChqJointVenName": null,
      "ChqNum": 123,
      "ChqPayeeAddr1": "Rome",
      "ChqPayeeAddr2": "1",
      "ChqPayeeAddr3": "Rome",
      "ChqPayeeCountry": "Italy",
      "ChqPayeeName1": "A1",
      "ChqPayeeName2": null,
      "ChqPayeePostalCode": "85695",
      "ChqPayeeRegCode": "IT",
      "ChqRecCode": "O",
      "ChqSeqNum": "1",
      "ChqVenCode": "ZZ",
      "ChqVouCode": null,
      "PayamtChqmanViewObj":[
        {
          "PaCompCode": "ZZ",
          "PaChqCompCode": "ZZ",
          "PaVenCode": "ACME",
          "PaChqNum": 123,
          "PaPayCurrAmt": 1,
          "PaAmt": 1,
          "PaVouInvCode": "INV001",
          "PaDiscAmt": 0,
          "PaChqSeqNum": "1"
        }
   ]
}

我可以使用以下方法获得请求正文,但我不知道如何删除JSON的详细部分并将处理后的请求正文传递给HTTP Servlet。

 public static String getBody(HttpServletRequest request) throws IOException {

        String body = null;
        StringBuilder stringBuilder = new StringBuilder();
        BufferedReader bufferedReader = null;

        try {
            InputStream inputStream = request.getInputStream();
            if (inputStream != null) {
                bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                char[] charBuffer = new char[128];
                int bytesRead = -1;
                while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
                    stringBuilder.append(charBuffer, 0, bytesRead);
                }
            } else {
                stringBuilder.append("");
            }
        } catch (IOException ex) {
            throw ex;
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException ex) {
                    throw ex;
                }
            }
        }

        body = stringBuilder.toString();
        System.out.println("BODY IS:" + body);
        return body;
    }

非常感谢您的帮助!

共有1个答案

萧阳波
2023-03-14

你不能改变请求,但你可以包装它。更多细节请看下面的问题:我们为什么要包装HttpServletRequest?api提供了一个HttpServletRequestWrapper,但是我们从包装请求中获得了什么呢?

您需要在servlet前面放置一个servlet过滤器才能使包装工作。

至于如何从内容中删除该部分,您可以使用string类提供的普通旧字符串操作,或者使用类似StringUtils的东西,或者您可以使用自己选择的库解析JSON,删除该属性,然后将其写回字符串。

 类似资料:
  • 问题内容: 我正在处理遗留代码,需要打补丁。 问题:古老的应用程序发送了错误的HTTP POST请求。参数之一不是URL编码。我知道这个参数总是排在最后,我知道它的名字。我现在正试图在运行在Tomcat中的服务器端修复它。 由于参数格式错误,因此无法通过HttpServletRequest的标准getParameter方法访问此参数。方法仅返回null。但是当我通过ServletInputStre

  • 问题内容: 我需要在Java中更改JSON属性的值,我可以正确获取该值,但无法修改JSON。 这是下面的代码 做这个的最好方式是什么? 问题答案: 是不可变的,旨在进行解析操作。但是,可以将其转换为允许突变的(和): 对于数组,可以使用:

  • 我有一个来自javax的现有jsonobject。json。JsonObject类。 我一辈子都想不出如何修改其中现有的价值观。理想情况下,我想这样做: 根据API,不允许修改该映射。 http://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html 此映射对象提供对JSON对象数据的只读访问,并尝试修改映射,无论是直接修改还是通过其集合

  • 求你了,我需要你的帮助。每当我试图运行下面的程序时,它会说不兼容的类型,字符串不能转换为整数。

  • 问题内容: 我正在尝试将我的项目目录添加到GOPATH,在Linux中,我可以这样做 在〜/ .bashrc中 Powershell中的等效性是什么 问题答案: 这应该遵循您使用Powershell设置任何Environment变量的方式(如本文所述): 如果您希望它永久存在(即将来将适用于任何外壳程序): 需要注意的一件事:当我们用来创建新的用户或计算机级环境变量时,在Windows Power

  • 问题内容: 我正在使用 javax.servlet.http.HttpServletRequest 来实现Web应用程序。 我可以使用 getParameter 方法获取请求的参数。但是我不知道如何在请求中设置参数。 问题答案: 您不能,不使用标准API。代表服务器收到的请求,因此添加新参数不是有效的选择(就API而言)。 原则上,您可以实现一个子类,该子类包装原始请求,并拦截方法,并在转发时传递