@SerializedName更改名称映射的注解

xiaoxiao2021-02-28  70

注解 @SerializedName

/* * Note that MyClass.b is now deserialized from either name1, name2 or name3. * * @see com.google.gson.FieldNamingPolicy * * @author Inderjeet Singh * @author Joel Leitch */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD}) public @interface SerializedName { /** * @return the desired name of the field when it is serialized or deserialized */ String value(); /** * @return the alternative names of the field when it is deserialized */ String[] alternate() default {}; }

来看一个例子:

public class UserSimple { @SerializedName("name") String name; String email; boolean isDeveloper; int age; }

但是,假设有一刻 API 发生改变导致返回的 JSON 数据格式发生更改,接口返回了 "fullName" 而不是"name"。

{ "age": 26, "email": "norman@futurestud.io", "fullName": "Norman", "isDeveloper": true }

不用担心,我们不要改动任何代码,我们只需要给类中改变的字段添加注解即可。

public class UserSimple { @SerializedName(value = "fullName", alternate="name")  String name; String email; boolean isDeveloper; int age; }

然而,假设有一刻 API 发生改变导致返回的 JSON 数据格式发生更改,接口返回了 "nickName" 而不是"name"和"fullName"

{ "age": 26, "email": "norman@futurestud.io", "fullName": "Norman", "isDeveloper": true } { "age": 26, "email": "norman@futurestud.io", "name": "Norman", "isDeveloper": true } { "age": 26, "email": "norman@futurestud.io", "nickName": "Norman", "isDeveloper": true }

我们只需要给类中改变的字段添加注解即可。

public class UserSimple { @SerializedName(value = "fullName", alternate={"name","nickName"}) String name; String email; boolean isDeveloper; int age; }

使用 Gson 进行注解,并在此运行,这就是是使用注解自动匹配的好处。

 

当然,你可以使用注解 @SerializedName 方式来保证命名规范,同时又可以正常映射接口字段,如果你的接口字段和命名规则差别很大,使用@SerializedName 注解来解决还是有必要的。

 

 

转载请注明原文地址: https://www.6miu.com/read-70408.html

最新回复(0)