能否实现请求参数进行修改后执行
请问一下远程函数可以实现对请求参数进行修改后,再执行?比如传入的参数修改为所需要的格式在入库
可以 "key-()":"fun(arg0,arg1..)" https://github.com/Tencent/APIJSON/blob/master/Document.md#3.2
我现在在request配置了一个函数,大致功能就是将数组转换为|分割的字符串,然后我想通过远程函数,将post请求内的某个参数数组,转换为|分割的字符串,在插入数据库能实现吗?
{"UPDATE":{"dealFileUrl-()":"dealFileUrl()"}},请求参数
远程函数:
,但是最后进库的还是没有转换的格式,而不是我想要的 | 分割的字符串格式,如:"test001.pdf|
test001.docx",这个是可以实现的吗
Request 表中和这个相关的配置具体完整发出来。
如果配置没问题,需要重启服务或调 /reload。 还不行的话看下是否关闭了 Parser.isNeedVerifyContent,类似这个问题 https://github.com/Tencent/APIJSON/issues/310
request配置:
请求:

request配置:
请求:
你写到对象 ReviewApply 外面了,对象对应的 SQL 执行完了才会执行 dealFileUrl(),改到对象内
已经改到里面了,sql确实执行完dealFileUrl()才会生成,但是生成的还是没修改的。

@WaizLee
http://apijson.cn/api/?send=true&type=JSON&url=http%3A%2F%2Fapijson.cn%3A8080%2Fget&json=%7B%0A%20%20%20%20%22pre%22%3A%20%7B%20%20%2F%2F%20%E9%87%8C%E9%9D%A2%E9%80%9A%E8%BF%87%E5%90%8E%E7%AB%AF%20Request%20%E8%A1%A8%20UPDATE%EF%BC%8C%E5%89%8D%E7%AB%AF%E9%9C%80%E8%A6%81%E4%BC%A0%E7%A9%BA%E5%AF%B9%E8%B1%A1%20%22pre%22%3A%20%7B%7D%20%0A%20%20%20%20%20%20%20%20%22toId()%22%3A%20%22countArray(null)%22%0A%20%20%20%20%7D%2C%0A%20%20%20%20%22Comment%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%22toId%40%22%3A%20%22pre%2FtoId%22%2C%20%20%2F%2F%20%E9%80%9A%E8%BF%87%E5%90%8E%E7%AB%AF%20Request%20%E8%A1%A8%20UPDATE%0A%20%20%20%20%20%20%20%20%22userId%22%3A%2082001%0A%20%20%20%20%7D%2C%0A%20%20%20%20%22%40explain%22%3A%20true%20%0A%7D

你好,我的是插入操作,相当于Comment里面已经有toId了,但是我想让toId的数据变个格式再插入到库中。
还有个问题,远程函数用+可以让数据入库了再执行函数吗,现在测试使用了+号,返回了解析后的json对象,但是数据还没进入到库中。
你好,我的是插入操作,相当于Comment里面已经有toId了,但是我想让toId的数据变个格式再插入到库中。
光给截图不给文本我打字都要浪费一些时间。
这里只是示例,把 toId 当成你的 document_list,放到上面对象,通过远程函数处理下,再到下面引用赋值。
"pre":{
"document_list": [],
"document_list()": "dealFileUrl()" // 比 "dealFileUrl()": "dealFileUrl()" + "document_list@": "pre/dealFileUrl" 少返回一个字段
},
"ReviewApply": {
"document_list@": "pre/document_list",
...
}
还有个问题,远程函数用+可以让数据入库了再执行函数吗,现在测试使用了+号,返回了解析后的json对象,但是数据还没进入到库中。
可以,但后面执行就只是应用业务代码中处理了,和数据库没有直接的关系。想在入库前处理按以上方式处理。 打算后续把 key-() 的执行结果放到 SQL 拼接的键值对中,简化使用,像你一开始写的那样直接用。
好的,感谢!请问一下具体怎么操作,数据入库后再执行远程函数
看日志是框架内事务控制了?该条数据,库内还未插入
好的,感谢!请问一下具体怎么操作,数据入库后再执行远程函数
看日志是框架内事务控制了?该条数据,库内还未插入
就是正常地把远程函数写在表对象内,不加优先级 - 就行,增删改完后 id 值会返回,可直接用或引用赋值
id是返回了,但是远程函数执行完之前,数据不在库里。这边有个功能是需要在数据入库后查数量的,如果数据没入库,我这个远程函数调用的时候只能从请求参数获取批量插入的数量,再加上数据库现有的数量。功能可以实现,就是代码量增加了
id是返回了,但是远程函数执行完之前,数据不在库里。这边有个功能是需要在数据入库后查数量的,如果数据没入库,我这个远程函数调用的时候只能从请求参数获取批量插入的数量,再加上数据库现有的数量。功能可以实现,就是代码量增加了
试试在远程函数内手动调用 parser.commit
parser对象怎么拿到?还有刚刚发现一个问题,put请求参数传入集合,到远程函数不见了,post请求正常。
请求:
远程函数拿到的对象:
replaceText不见了。。测试发现传入集合就不行了,post正常,put直接不见了,麻烦看看什么问题,谢谢
parser对象怎么拿到?还有刚刚发现一个问题,put请求参数传入集合,到远程函数不见了,post请求正常。 请求:
远程函数拿到的对象:
replaceText不见了。。测试发现传入集合就不行了,post正常,put直接不见了,麻烦看看什么问题,谢谢
库代码没有传,可以在自己业务项目在 DemoParser.createObjectParser 时传 this 给 DemoObjectParser 实例使用。
批量 POST/PUT 都会把 Table[]:[ {}, {}...] 拆分为多个 Table:{} 再执行,对应远程函数是怎么配置的?
截屏里的 JSON 麻烦把文本也一块发出来方便定位问题
这个传入的[]只是为了给我的远程函数使用的,让前端固定传入的一个值而已,但是put请求进来后该参数不见了。我使用post请求是可以拿到这个replaceText的。 { "ReviewOpinion[]": [ { "id": "1448949280413315072", "feedback_opinion": "测试反馈001", "editor": "jsfzr_a" } ], "apply_id": "1448945313356705792", "subject_ind": 1, "replaceText": ["test1","test2"], //这个只是让前端固定传给我的一个值,用于远程函数获取到转换为list做相关操作,目前使用put请求,到远程函数后,该参数消失不见,如果简单传入String类型或Integer类型是可以在远程函数见到的 "tag": "feedback" } 作者可以试试在自己的项目尝试传入一个list参数,put请求该参数会消失不见,post请求可以正常获取,看看有没类似情况
这个传入的[]只是为了给我的远程函数使用的,让前端固定传入的一个值而已,但是put请求进来后该参数不见了。我使用post请求是可以拿到这个replaceText的。 { "ReviewOpinion[]": [ { "id": "1448949280413315072", "feedback_opinion": "测试反馈001", "editor": "jsfzr_a" } ], "apply_id": "1448945313356705792", "subject_ind": 1, "replaceText": ["test1","test2"], //这个只是让前端固定传给我的一个值,用于远程函数获取到转换为list做相关操作,目前使用put请求,到远程函数后,该参数消失不见,如果简单传入String类型或Integer类型是可以在远程函数见到的 "tag": "feedback" } 作者可以试试在自己的项目尝试传入一个list参数,put请求该参数会消失不见,post请求可以正常获取,看看有没类似情况
这个 bug 应该是 AbstractObjectParser.onPutArrayParse 当 isTable == false 时没有调用 sqlRequest.put(realKey, targetArray); 导致

可以加上这句,改了测试没问题后建议提交 PR 贡献代码,会把你加到 APIJSON 贡献者列表中 https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md#%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%80%E5%AE%9A%E8%A6%81%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81
或者前端可以把 JSONArray 转为 String 传参 "replaceText": "["test1","test2"]",也可以直接用逗号分隔 "replaceText": "test1,test2"
也遇到了类似情况,这个问题现在解决了吗? @TommyLemon 流程描述:在post写入数据时候,request表配置 update规则,调用自定义函数,自定义函数会修改JSONObject current加工指定字段。 自定义函数触发也成功修改了对应字段,发现写入到数据库数据并没有改变。
request配置
{"INSERT": {"tag": [], "@role": "OWNER"}, "REFUSE": "id", "UPDATE": {"transformGeoHash-()":"transformGeoHash(geoHash,cityCode)"}}
function自定义函数
public Object transformGeoHash(@NotNull JSONObject current,@NotNull String geoHash,@NotNull String cityCode){
if (current != null && current.containsKey("latitude") && current.containsKey("longitude")){
String geoHashVal = GeoHashUtils.encode(current.getDoubleValue("latitude"),current.getDoubleValue("longitude"));
current.put(geoHash,geoHashVal);
current.put(cityCode,"100000");
}
return null;
}

已收到!
也遇到了类似情况,这个问题现在解决了吗? @TommyLemon 流程描述:在post写入数据时候,request表配置 update规则,调用自定义函数,自定义函数会修改JSONObject current加工指定字段。 自定义函数触发也成功修改了对应字段,发现写入到数据库数据并没有改变。
request配置
{"INSERT": {"tag": [], "@role": "OWNER"}, "REFUSE": "id", "UPDATE": {"transformGeoHash-()":"transformGeoHash(geoHash,cityCode)"}}function自定义函数
public Object transformGeoHash(@NotNull JSONObject current,@NotNull String geoHash,@NotNull String cityCode){ if (current != null && current.containsKey("latitude") && current.containsKey("longitude")){ String geoHashVal = GeoHashUtils.encode(current.getDoubleValue("latitude"),current.getDoubleValue("longitude")); current.put(geoHash,geoHashVal); current.put(cityCode,"100000"); } return null; }
可以改成两个远程函数键值对,都 return 对应值
"cityCode-()":"getCityCode()",
"geoHash-()":"transformGeoHash(geoHash,cityCode)"
已收到!
@WaizLee @jianan789 已解决 https://github.com/Tencent/APIJSON/commit/08581418850ed44449390d1404e49832bc15a488
已收到!