JBPM通过REST API启动流程传递Float变量被转为Double问题咨询
JBoss流程引擎REST接口传递Float类型参数解决方案
问题根本原因
- JSON标准本身不存在
Float、Double的细分类型,所有小数数值默认会被JSON解析器识别为Double类型。你尝试的500.0f写法不符合标准JSON语法规范,因此无法被正常解析。 - JBoss流程引擎默认采用Double作为小数参数的映射类型,无显式类型声明时不会自动转换为Float类型。
可行解决方案
方案1:显式声明变量类型(最推荐)
JBoss官方提供的流程启动REST接口支持在请求payload中显式指定变量类型,调整你的请求结构如下即可生效:
{ "variables": { "amount": { "type": "Float", "value": 500.0 } } }
引擎识别到type字段的Float声明后,会自动将数值转换为Float类型赋值给对应流程变量。
方案2:强制指定JSON反序列化类型
如果你的请求参数是直接映射到自定义Java实体类,可以在对应实体的amount字段上添加Jackson注解(JBoss默认使用Jackson作为JSON解析组件),强制将传入的小数反序列化为Float类型:
@JsonDeserialize(as = Float.class) private Float amount;
方案3:流程前置逻辑做类型转换
如果上述两种方案都无法落地,可以在流程启动的前置监听器/拦截逻辑中,先获取被解析为Double类型的amount参数,手动调用floatValue()方法转换为Float类型后再赋值给流程变量。
内容的提问来源于stack exchange,提问作者jmiguel77
相关产品推荐
相关产品推荐

