JsonPath JsonProvider SPI

JsonPath 随附五种不同的 JsonProviders:

如下图:

JsonPath JsonProvider SPI

注意,只有在应用程序初始化时,才能按需求更改配置默认值。强烈不建议在运行期间更改配置,尤其是在多线程应用程序中。

修改默认配置实例代码:

Configuration.setDefaults(new Configuration.Defaults() {
    // 实例化 JsonProvider
    private final JsonProvider jsonProvider = new JacksonJsonProvider();
    // 实例化 MappingProvider
    private final MappingProvider mappingProvider = new JacksonMappingProvider();
      
    @Override
    public JsonProvider jsonProvider() {
        // 返回配置的 JsonProvider
        return jsonProvider;
    }

    @Override
    public MappingProvider 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 的类路径。

Jakarta EE 9 JSON-P (JSR-342) 和 JSON-B (JSR-367) 提供程序至少需要 Java 8,并要求应用程序运行时类路径上有兼容的 JSON API 实现(如 Eclipse Glassfish 和 Eclipse Yasson。Java EE 应用程序容器也可能提供此类实现。还请注意,Apache Johnzon 尚不兼容 Jakarta EE 9 规范的类路径,如果选择 JSON-B 映射提供程序,则还必须配置和使用 JSON-P 提供程序。

Jakarta EE 9 关于 JSON 处理和数据库绑定(映射)的规范有一个特点,那就是 Json 数组和对象在完全解析或写入后具有不变性。为了遵守 API 规范,同时允许 JsonPath 通过添加、设置/输入、替换和删除操作修改 Json 文档,JakartaJsonProvider 必须使用可选的 true 参数进行 initiliazed:

  • JsonProvider jsonProvider = new JakartaJsonProvider(true)(启用可变 Json 数组和对象)

  • JsonProvider jsonProvider = new JakartaJsonProvider()(默认,严格遵循 JSON-P API)

无论采用哪种启动模式,都支持使用 JsonPath 进行的所有查找和读取操作,默认模式所需的内存更少,性能更高。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号