Closed jia199807 closed 2 months ago
APIAuto 请求与结果完整截屏
APIAuto 请求与结果完整截屏
只是为了获取分页信息的话,info@ 可以不传了,直接用 listInfo。
如果一定要自定义字段,有几种简单方式: 1.客户端也用 fastjson 或者其它支持 $ref 这个引用解析语法的 JSON 库;
2.后端 fastjson 设置去除 $ref: 单独设置(DemoController get 等方法内) JSON.toJSONString(menujson, SerializerFeature.DisableCircularReferenceDetect); 全局设置(不推荐,性能差) JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask();
3.传参特定 "key": value 或 "key@": value,key 为 listTotal, listInfo,value 可以是任何值,建议 null;
测试了一下您给的3种方法都可行。 由于前端项目已完结,查询语句不便更改,采用以下方式兼容旧版。
@PostMapping(value = "get")
@Override
public String get(@RequestBody String request, HttpSession session) {
// 通过new JSONObject的方式,在不关闭引用检测的情况下避免$ref
String result = super.get(request, session);
JSONObject jsonObject = JSON.parseObject(result);
JSONObject info = jsonObject.getJSONObject("info");
if (info != null) {
jsonObject.put("info", new JSONObject(info));
}
// 返回更新后的 JSON 字符串
return jsonObject.toJSONString();
}
效果:
推荐以上方式 2,不只是这一个问题,还能解决其它同类问题。 你的这段代码只能兼容 key 为 info@ 的,如果欢乐 pageInfo@ 等其它 key 就得再加代码处理
好的,已更换下面的方式,效果相同
@PostMapping(value = "get")
@Override
public String get(@RequestBody String request, HttpSession session) {
String result = super.get(request, session);
JSONObject jsonObject = JSON.parseObject(result);
return JSON.toJSONString(jsonObject, SerializerFeature.DisableCircularReferenceDetect);
}
APIJSON Version/APIJSON 版本号
7.0.3
Database Type & Version/数据库类型及版本号
MySQL 8.3.0
Environment/环境信息
APIAuto Screenshots/APIAuto 请求与结果完整截屏
上传失败 后续补充
Current Behavior/问题描述
Expected Behavior/期望结果
Any additional comments?/其它补充说明?