JasperReports表达式求值错误:参数类型不匹配问题排查
问题根源与修复方案
错误根源
- JasperReports对参数类型的校验非常严格:报表里明确声明
account参数是java.lang.String类型,但你的Java代码传入的是Long对象,类型不匹配直接导致表达式求值失败。 - 别以为只是判断
!= null就不会有问题——JasperReports在处理参数时,会先尝试把传入的对象转换为报表声明的类型,Long转String没法自动完成,这就触发了JRExpressionEvalException。
核心问题点
- 报表参数定义和Java传参的类型完全不匹配,违反了JasperReports的参数绑定规则。
- 报表里的默认值
"11111"是String类型,和你传入的Long类型本质上是两种不同的数据类型,哪怕逻辑上都是数字,类型不兼容照样报错。
修复方案
- 方案1:调整Java传参类型:把要传入的Long类型
account转成String再传,比如用String.valueOf(accountLong)处理后再放入参数Map。 - 方案2:修改报表参数定义:把报表里
account的类型改成java.lang.Long,同时把默认值改成11111(去掉引号,用Long类型的数值),让参数类型和Java传参保持一致。
内容的提问来源于stack exchange,提问作者Eljah
相关产品推荐
相关产品推荐

