如何在Java JOLT中输出@class作为键?Jackson映射需求
解决JOLT中输出带@class键的JSON问题
我之前刚踩过JOLT处理@符号的坑,刚好能帮你解决这个问题!
你遇到的核心问题是:JOLT里@是特殊符号,默认会被解析为通配符或节点引用,没法直接作为普通字符串键输出。而Jackson需要@class这个明确的键来指定Java类,所以得让JOLT把@class当成普通字符串处理。
正确的JOLT配置写法
你的配置思路已经很接近了,只需要把目标键@class用单引号包裹,告诉JOLT这是一个普通字符串,而不是特殊符号。修改后的配置如下:
{ "locations": { "*": { "#location": "tempLocations[&1].riskItemType", "#com.object.beans.element.Location": "tempLocations[&1]['@class']" } } }
为什么这样生效?
JOLT的语法规则里,以@开头的标识符会被当作特殊符号处理(比如@代表当前节点,@(key)代表引用其他键的值)。用单引号把@class括起来后,JOLT就会将其视为普通的字符串键名,不再解析@的特殊含义。
示例验证
假设你的输入JSON是:
{ "locations": [ { "id": "loc1" }, { "id": "loc2" } ] }
经过上述JOLT转换后,输出的JSON会是:
{ "tempLocations": [ { "riskItemType": "location", "@class": "com.object.beans.element.Location" }, { "riskItemType": "location", "@class": "com.object.beans.element.Location" } ] }
这样生成的@class键就能被Jackson正确识别,自动将对应的节点映射到com.object.beans.element.Location类。
内容的提问来源于stack exchange,提问作者SuperWes
相关产品推荐
相关产品推荐

