【发布时间】:2023-03-19 21:22:01
【问题描述】:
我想在请求正文到达 Http Servlet 并得到处理之前对其进行修改。请求正文的 JSON Payload 如下所示,我想去掉“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;
}
非常感谢您的帮助!
【问题讨论】:
-
为什么要删除那部分?
-
某个业务案例需要它。
-
@obayral - 你的方法完全错误。 Servlet 规范已经 为正是您想要完成的工作提供了一个强大的机制。请查看下面的Bogdan's 回复。如有问题请回帖;请务必“支持”和“接受”他的回复。
-
@paulsm4 你能告诉我为什么我的方法完全错误吗?我也接受了答案。
标签: java http servlets request servlet-filters