1,json数据和POJO的关系
目前微服务非常火,前后端分离成为主流趋势,接口返回的数据主要以json数据为主。后端研发需要将POJO转为json字符串。微服务之间的调用或调用第三方接口返回的json数据需要转为POJO对象进行逻辑处理。
目前使用的比较多的json和POJO互转的工具包有:
FastJson (每年都要爆出多次漏洞)
FastJson2
Gson
Jackson (Spring内置)
Hutool
json-lib
JsonPath (本次主角)
2,JsonPath返回结果
在java中使用JsonPath时,知道返回的结果类型是很重要的。JsonPath将自动尝试将结果强制转换为调用方所期望的类型。
//Will throw an java.lang.ClassCastException
List<String> list = JsonPath.parse(json).read("$.store.book[0].author")
//Works fine
String author = JsonPath.parse(json).read("$.store.book[0].author")
计算路径时需要知道路径是明确的还是不明确的,明确的返回单个值,不明确的返回一个List.
不明确的路径有如下几种情况:
..- 深度扫描操作?(<expression>)- 表达式[<number>, <number> (, <number>)]- 多个数组索引
3,JsonPath提供的MappingProvider和JsonProvider
默认情况下,一个简单的对象映射器由MappingProvider SPI提供。JsonPath提供了默认的实现: JsonSmartJsonProvider 和 JsonSmartMappingProvider。但是不能将json字符串转为POJO对象。
JsonPath提供的MappingProvider如下:
- JsonSmartMappingProvider(默认)
- GsonMappingProvider
- JacksonMappingProvider
- JakartaMappingProvider
- JsonOrgMappingProvider
- TapestryMappingProvider
JsonPath提供的JsonProvider如下:
- JsonSmartJsonProvider (默认)
- GsonJsonProvider
- JacksonJsonNodeJsonProvider
- JacksonJsonProvider
- JakartaJsonProvider
- JsonOrgJsonProvider
- TapestryJsonProvider
4,JsonPath配置,支持json转POJO
在初始化应用程序时才能更改所配置默认值。强烈反对在运行时进行更改,尤其是在多线程应用程序中。
Configuration.setDefaults(new Configuration.Defaults() {
private final JsonProvider jsonProvider = new JacksonJsonProvider();
private final MappingProvider mappingProvider = new JacksonMappingProvider();
@Override
public JsonProvider jsonProvider() {
return jsonProvider;
}
@Override
public MappingProvider mappingProvider() {
return mappingProvider;
}
@Override
public Set<Option> options() {
return EnumSet.noneOf(Option.class);
}
});
注意:
JacksonJsonProvider 要求 com.fasterxml.jackson.core:jackson-databind:2.4.5
GsonJsonProvider 要求 com.google.code.gson:gson:2.3.1
5,实战
准备数据
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction"

本文介绍了如何使用JsonPath在微服务场景下,通过Jackson、Gson等工具包将JSON数据转化为POJO对象,包括List和复杂嵌套结构的处理,并提到了JsonPath的MappingProvider和JsonProvider配置。
最低0.47元/天 解锁文章
3885

被折叠的 条评论
为什么被折叠?



