Gson注解和Jackson注解能否共存于同一个POJO中?

Can Gson and Jackson annotations coexist in the same POJO?

我正在处理遗留 Android 项目,该项目使用非常旧版本的 Jackson lib 来解析从我们的网络 API.

带来的 JSONs

我目前正在为上述项目开发一项新功能,并希望使用带有 Gson 库的 Retrofit 作为其 JSON 解析器,因为与我们之前的库相比,这两个库都提供了更大的灵活性和更清晰的代码库选择。

问题是,我需要一些遗留的 POJO,而那些已经有 Jackson 注释。将 Gson 和 Jackson 注释放在同一个 class 中会产生任何冲突吗?或者我是否会被迫创建带有 Gson 注释的镜像 classes 以避免潜在的问题?

示例:

import org.codehaus.jackson.annotate.JsonProperty;
import com.google.gson.annotations.SerializedName;

public class someClass {

    @JsonProperty ("some_attribute") // Jackson annotation
    @SerializedName("some_attribute") // Gson annotation
    private String someAttribute;

}

注释只是元数据。他们自己没有任何行为。

有行为的是对应的处理注解的组件。例如,Jackson 的 ObjectMapper(其内部结构)读取您提供的类型,对其进行内省以找到任何 有意义的 注释,并将它们用于 serialize/deserialize。 @SerializedName 对 Jackson 没有意义,因此忽略它。同样,@JsonProperty 对 Gson 没有意义,所以它会忽略它。

不会有任何问题*。

* 除非您编写自己的类型适配器,无论出于何种原因使用另一个库的注释。