Genexus REST Web服务如何忽略未识别的过程参数
问题描述
我有多个对外暴露为REST Web服务的过程:
我需要实现服务解析请求体时自动忽略未在“rules”中定义的字段。当前逻辑下,过程尝试解析参数定义外的字段时,会抛出如下错误:
示例
某过程初始定义如下:parm(in:&parm1, in:&parm2, out:&someResponse);
后续更新为:
parm(in:&parm1, in:&parm2, in:&parm3, out:&someResponse);
部分部署环境的Web服务已升级至新版本,还有部分环境仍运行仅支持2个入参的旧版本。
不同APP分发场景下的调用方均按最新参数定义发送请求体:
{"parm1" : "somevalue","parm2" : "somevalue","parm3" : "somevalue"}
我方无法控制调用该Web服务的第三方逻辑,因此希望服务端可自动忽略未定义的闲置参数,避免报错。
使用环境:GX 16 U11 - Java Generator
解决方案
全局配置(推荐)
GeneXus Java生成的REST服务底层使用Jackson完成JSON序列化/反序列化,默认开启FAIL_ON_UNKNOWN_PROPERTIES特性才会触发未知字段报错,按以下步骤全局关闭该特性即可:
- 找到GeneXus生成的Java项目中的
web.xml配置文件 - 新增如下Servlet上下文参数:
<context-param> <param-name>jackson.deserialization.fail-on-unknown-properties</param-name> <param-value>false</param-value> </context-param>
配置完成后重新打包部署服务即可生效,所有REST服务都会自动忽略请求中未定义的字段,不会抛出解析错误。
单服务单独配置(可选)
如果不需要全局生效,仅需给指定过程配置忽略未知字段,可在对应REST过程的「高级属性」-「自定义特性」中添加如下配置项即可:jackson.deserialization.fail-on-unknown-properties=false
内容的提问来源于stack exchange,提问作者Bruno.S
相关产品推荐
相关产品推荐

