在实际场景中,我们经常需要记录三方调用日志,当后续遇到问题时好定位与甩锅。
在三方调用中,调用第三方文件上传接口进行文件传输非常常见,对文件上传接口记录日志时,由于 Base64 字符过大,按理说是不应当保存的。
举个例子,对下面的请求报文,docContent
字段存储了文件的 Base64 格式数据:
{
"data": {
"tNo": "1605f4931032022090714473840657",
"files": [
{
"fileCode": "HH03",
"docContent": "超长的文件 Base64 字符超长的文件 Base64 字符超长的文件 Base64 字符超长的文件 Base64 字符 YQIAAAA=",
"fileName": "一个文件",
"fileSuffix": ".pdf"
}
],
"status": "2"
}
}
那么,如何在记录日志时不记录该字段呢?
各位大佬,有什么办法,可以比较方便的将上面的报文清洗为如下格式:
{
"data": {
"tNo": "1605f4931032022090714473840657",
"files": [
{
"fileCode": "HH03",
"fileName": "一个文件",
"fileSuffix": ".pdf"
}
],
"status": "2"
}
}
我知道通过 OGNL 相关工具类可以通过一个表达式取出 JSON 报文的某个字段数据,比如:
public void test(){
// JSON 报文
String json = "上面的示例 json 报文";
// 表达式
String expression = "data.files.fileCode"
// 通过表达式获取 json 报文的某个字段属性
String fileCode = ognlUtils.get(json, expression, String.class);
}
那么,有没有某种工具类也可以通过形如"data.files.fileCode"的表达式去除 JSON 报文的某个字段及值呢?
各位大佬,想请教下~~~
1
lmshl 2022-09-16 12:00:05 +08:00
写 JSON Viewer 的时候碰到过类似需求,实现方式很简单,就是
public String truncate(json: Json) { 如果 Array 元素超多,或者字符串超长,则截断至某个位置,比如"一个超长的字符串<截断剩余长度 9999>" 递归 } |
2
xaplux 2022-09-16 13:03:08 +08:00
JsonPath 或者 正则替换
|
3
leeqingshui OP |