如何修改java中的HttpServletRequest body?
How to modify HttpServletRequest body in java?
我想在请求正文到达 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;
}
非常感谢您的帮助!
您无法更改请求,但可以包装它。有关详细信息,请参阅以下问题:
您需要在您的 servlet 前面放置一个 servlet filter 以使包装工作。
至于如何从内容中删除该部分,您可以使用 String
class 提供的普通旧字符串操作,或者使用 StringUtils, or you could parse the JSON 之类的方法您选择的库,删除 属性,然后将其作为字符串写回。
我想在请求正文到达 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;
}
非常感谢您的帮助!
您无法更改请求,但可以包装它。有关详细信息,请参阅以下问题:
您需要在您的 servlet 前面放置一个 servlet filter 以使包装工作。
至于如何从内容中删除该部分,您可以使用 String
class 提供的普通旧字符串操作,或者使用 StringUtils, or you could parse the JSON 之类的方法您选择的库,删除 属性,然后将其作为字符串写回。