如何解决JsonPath访问Jackson JsonNode时的路径不存在异常?
问题解决:JsonPath访问Jackson ObjectNode触发PathNotFoundException
核心原因
JsonPath 2.4.0未正确绑定Jackson的JacksonJsonProvider,导致无法识别ObjectNode类型的输入对象,即使输入中确实存在目标字段。
解决方案
1. 补充依赖
确保引入Jackson对应的JsonPath扩展包,核心json-path jar不包含Jackson的Provider实现:
<!-- Maven依赖示例 --> <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path-jackson</artifactId> <version>2.4.0</version> </dependency>
2. 显式配置Jackson Provider
使用JsonPath时,必须指定使用JacksonJsonProvider来解析ObjectNode:
import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.spi.json.JacksonJsonProvider; import com.fasterxml.jackson.databind.node.ObjectNode; // 构建Jackson专属配置 Configuration jacksonConfig = Configuration.builder() .jsonProvider(new JacksonJsonProvider()) .build(); // 你的ObjectNode输入 ObjectNode input = ...; // 用配置好的上下文解析并读取字段 Object data = JsonPath.using(jacksonConfig).parse(input).read("$.data");
如果项目中已有自定义ObjectMapper,可以传入Provider复用:
import com.fasterxml.jackson.databind.ObjectMapper; ObjectMapper customMapper = new ObjectMapper(); Configuration jacksonConfig = Configuration.builder() .jsonProvider(new JacksonJsonProvider(customMapper)) .build();
3. 验证输入有效性
先打印input.toString()确认根节点下确实存在data字段,排除输入对象构造错误的可能。
内容的提问来源于stack exchange,提问作者pnndesh
相关产品推荐
相关产品推荐

