Java依赖包可能有不同版本且不兼容时怎么处理

在编写java的公共包时,需要依赖某些第三方包,如jackson。并且需要配置jackson的序列化方式为SNAKE_CASE,但由于使用这个公众包的项目他们所依赖的jackson包版本可能不一致,并且jackson在2.12之后配置方式变了,也就是新老版本不兼容,所以就会发生问题,这个时候该怎么办呢?

分析一下:
新版本的jackson配置SNAKE_CASE使用的是类:PropertyNamingStrategies
老版本的jackson配置SNAKE_CASE使用的是类:PropertyNamingStrategy

那么我们可以直接使用Class.forName方法尝试加载PropertyNamingStrategies,并用try catch包裹起来;如果加载到新版本的PropertyNamingStrategies,则使用新版本的配置方式,加载不到则使用旧版本的配置方式。问题得到解决。

代码样例:

try{
    // 2.12版本之后PropertyNamingStrategy使用新的PropertyNamingStrategies代替
    // 为了兼容老版本,优先使用PropertyNamingStrategies,类不存在则使用老版本PropertyNamingStrategy
    Class.forName("com.fasterxml.jackson.databind.PropertyNamingStrategies");
    this.objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
}catch (ClassNotFoundException e) {
    this.objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
}
this.okHttpClient = new OkHttpClient.Builder()
        .connectTimeout(timeout, TimeUnit.SECONDS)
        .build();

觉得内容还不错?打赏个钢镚鼓励鼓励!!👍