java - 如何在 java 中修改 HttpServletRequest 正文?
问题描述
我想在请求正文到达 Http Servlet 并得到处理之前对其进行修改。请求正文的 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;
}
非常感谢你的帮助!
解决方案
您无法更改请求,但可以包装它。有关详细信息,请参阅以下问题:为什么我们要包装 HttpServletRequest ?api 提供了一个 HttpServletRequestWrapper 但是我们从包装请求中获得了什么?
您需要在您的 servlet 前面放置一个servlet 过滤器以使包装工作。
至于如何从内容中删除该部分,您可以使用String
类提供的普通旧字符串操作或类似StringUtils的东西来完成,或者您可以使用您选择的库解析 JSON,删除该属性,然后将其写回字符串。
推荐阅读
- makefile - Make:如何获得先决条件N
- python - *、in *zip 和 *D.items() 做什么?
- sql - 以更广泛的方式从确定的过滤器中提取 posgresql 中的最后一个日期和上一个日期
- python - 如何以两个为一组将 DataFrame 打印到多个 Excel 工作表?
- python - python.pythonPath 的 settings.json 环境变量在 Windows 和 Linux 之间不起作用
- powershell - PowerShell 中是否允许嵌套循环和 if 语句?
- excel - 为什么每个循环的 VBA 100,000 单元格需要这么长时间?
- c# - 如何控制 ExpressionAnimation 中的变量值?
- powershell - Powershell 将对象数组转换为 PSCustomObject
- python - 从字典中写入一个 CSV,其中值作为标题键对齐在下