• 返回前端页面的属性名称和实体类的名称不一致用@JsonProperty @SerializedName


    场景:比如前端要求你返回一个json数据类型,但是这个json类型的里面属性有的值重复了,比如

    {
    name:zhangsan,
    age:12,
    teacher:[
    name:Mrs Liu
    subject:math
    ]
    }

    就像这样,出现了两个name,但是前端就是要求这样传的,很蛋疼有没有,都是name,时间长了就不知道啥意思了,所以,咱们有解决一下

    @JsonProperty("name")
    private String teacherName;

    在这篇文章中,我们将介绍如何将多个字段名称映射到一个字段属性上。如果你的应用有多个接口数据,那么使用 @SerializedName 注解就可以解决,你仍然可以使用原来的model类,而不必增加新的model类。

    @SerializedName 延伸

    在第一个 @SerializedName 注解文章中,基本用法如下:

    public class UserSimple {     
        

    给 Model 变量添加注解,并可以序列化和反序列化。

    但是,还不能满足我们的需求,SerializedName 接受两个参数,value、alternate,第一个value是默认参数,如果你只填了一个参数,那这个值将会赋值给 value,第二个 alternate 就为空,同样都填上也是ok的。

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

    SerializedName 改变了默认序列化和默认反序列化的字段取值,所以,如果你使用 Gson 将 Java model 类生称 JSON 串,结果就是 value 的名称就是字段的名称。

    alternate 属性是用在反序列化上的,也就是说从 JSON 到 Java 类的过程。Gson 会帮我们匹配 JSON 中的命名,并尝试找到一个字段映射。对于上面例子model类中,Gson 会将字段 fullname 或者 username 映射到字符串 name上。无论哪一个都会映射。

    如果在 model 中给变量使用了 @SerializedName 的两个属性,那么最终会返回相同的 Java 对象,例如:

    {    
      'fullName': 'Norman',   
     'email': 'norman@futurestud.io'
    }
    
    {    
        'username': 'Norman',   
        'email': 'norman@futurestud.io'
    }
    

    再来看一个例子:

       {
           'username': 'Norman',   
           'fullName': 'Marcus',   
           'email': 'norman@futurestud.io'
      }
    

    如果多个字段匹配一个变量字段,谁在后面Gson就会将值赋给谁,结果最终是 name:Marcus。




     

    public class User {  
          
        @JsonProperty(value = "Name")  
        private String name;  
          
        @JsonProperty(value = "Age")  
        private int age;  
    }  

  • 相关阅读:
    C/C++程序内存泄漏检测
    linux下的内存管理
    Linker Script 链接器脚本
    linux内核进程调度以及定时器实现机制
    嵌入式软件设计中查找缺陷的几个技巧
    winCE DEBUGZONE
    程序员三个境界
    EJB初识(通熟易懂)
    JVM/JDK/JRE/IDE—区别(很经典)
    dubbo初识(一)Dubbo架构设计详解
  • 原文地址:https://www.cnblogs.com/xianz666/p/13297403.html
Copyright © 2020-2023  润新知