请问一下这种一个字段记录其他表多个id的情况,通过apijson如何关联查询id对应的名称
Description
请问一下这种一个字段记录其他表多个id的情况,通过apijson如何关联查询id对应的名称
目前我的解决方案是,写了一个远程函数来解决
public String getFieldName(@NotNull JSONObject current, @NotNull String fieldName,@NotNull String tableName,@NotNull String displayName) throws Exception{
log.info("参数列表:{},{},{}",fieldName,tableName,displayName);
String fileValue = current.getString(fieldName);
log.info("参数{}的值:{}",fieldName,fileValue);
if (StringUtils.isBlank(fileValue)){
return "";
}
String[] split = fileValue.split(",");
List<String> fileValueIdList = Arrays.asList(split);
JSONObject jsonObjectList = buildJsonObject(tableName, displayName, fileValueIdList);
log.info("构建查询条件:{}",jsonObjectList);
APIJSONParser<Long> parser = new APIJSONParser<>();
parser.setNeedVerify(false);
parser.setMethod(RequestMethod.GET);
JSONObject result = parser.parseResponse(jsonObjectList.toJSONString());
log.info("查询结果:{}",result);
JSONArray jsonArray = result.getJSONArray(tableName+"[]");
List<Object> displayNameList = new ArrayList<>();
jsonArray.forEach(item -> {
JSONObject itemObj = (JSONObject) item;
String name = itemObj.getString(displayName);
displayNameList.add(name);
});
String displayNames = StringUtils.join(displayNameList, ",");
log.info("返回显示值:{}",displayNames);
return displayNames;
}
这是一个方式,也可以提供一个 字符串转列表 的远程函数,转换后,再通过传副表 "id{}@": "/Z_teacher2/stu_ids" 引用赋值。 或者找下 SQL 中 逗号分隔数组 转 JSON Array 的方案( concat 和 replace 虽然能做但比较麻烦 )。
也可以为 APIJSON 新增支持这种 “数组”,AbstractSQLConfig getRangeString 判断 String 格式自动 split 逗号转成数组,但会和已有的 key{}:"conditon1;conditon2" 条件范围冲突,可能还需要额外字段来标识: https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java#L3996-L4095
不如远程函数方式,或者扩充 @json:"a,b,c",当 JSON.parse 未解析成非字符串类型值,则 split 逗号转成数组 arr,再 new ArrayList(arr) 转成列表(可能这个才是最佳方式)
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java#L1055-L1061