@SerializedName 更改名称映射的注解

注解 @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 注解来解决还是有必要的。

 

 

@SerializedName是一个注解,用于在Java对象和JSON数据之间进行字段名的映射。它可以更改字段名,并提供备用名属性。通过使用@SerializedName注解,我们可以在解析JSON数据时将对应字段的值赋给Java对象的属性,同时在生成JSON数据时将Java对象的属性名转换为指定的字段名。 在引用中的示例中,@SerializedName注解被用于修改字段名,并提供了备用名属性。例如,当解析JSON数据时,如果字段名为"email_address"、"email"或"emailAddress"中的任意一个出现,都会将对应的值赋给属性。而在生成JSON数据时,属性名"userName"会被转换为"n"。这样可以通过Gson库实现字段名和属性名之间的映射。 在引用中的示例中,@SerializedName注解被用于将字段名"n"映射到属性"userName",字段名"p"映射到属性"password",字段名"s"映射到属性"sex"。这样,在解析JSON数据时,对应字段的值会被赋给相应的属性。同样地,在生成JSON数据时,属性的值会被转换为对应的字段名。 另外,在引用中的示例中,@SerializedName注解也可以用于定义反序列化的备用名称。它可以帮助我们处理一些特殊情况,比如字段名在不同的情况下可能有变化的情况。 总之,@SerializedName注解是一个有用的工具,可以在Java对象和JSON数据之间进行字段名的映射,以实现灵活的解析和生成JSON数据的过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [字段重命名@SerializedName](https://blog.csdn.net/m0_46350041/article/details/109184797)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [auto-value-gson:AutoValue Extension添加Gson DeSerializer支持](https://download.csdn.net/download/weixin_42131439/16248240)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值