【问题标题】:How to map pojo class's field to string object returning from API如何将 pojo 类的字段映射到从 API 返回的字符串对象
【发布时间】:2021-11-22 21:57:29
【问题描述】:

我正在开发一个应用程序,我想将来自数据 api 的字符串对象转换为 json 对象。现在,我将字符串对象转换为 json,但出现了问题。 我的 pojo 类有多个具有相应 getter 和 setter 的字段,其中一个是“filterName”,它看起来像

   @SerializedName(value="cellFilter", alternate="tissueFilter")
    private String filterName;

它的作用是提取与“cellFilter”和“tissueFilter”相关的值。我不确定它是否是使用相同字段淘汰数据的优化方式。另外,我想使用同一个字段来检索另一个值,但我不知道该怎么做(即我想使用 filterName 来获取 organizationFilter、cellFilter 和 applicationFilter 的值)。

数据对象如下所示 注意 - 组织过滤器、细胞过滤器和应用过滤器有 3 个字符串,它们来自数据 api。在将它们转换为 java 对象后,它们看起来像这样,

组织过滤器


 {
    "url": "xyz",
    "sortOrder": 8,
    "imageId": "1111",
    "tissueFilter": "Heart"
  }

细胞过滤器

{
    "url": "xyz",
    "sortOrder": 6,
    "imageId": "2222",
    "cellFilter": "Pancreas"
  }

和应用过滤器

 {
    "applicationFilter": "c56",
    "url": "xyz",
    "sortOrder": 1,
    "imageId": "3333",
  }

谢谢

【问题讨论】:

    标签: java gson


    【解决方案1】:

    如果 Jackson JSON 库用于序列化/反序列化 JSON 数据,则应应用 @JsonAlias 注释来反序列化可能具有不同名称的字段:

    @Data
    class Pojo {
        private String url;
        private int orderId;
        private String imageId;
    
        @JsonAlias({"applicationFilter", "cellFilter", "tissueFilter"})
        private String filter;
    }
    

    在对上述 JSON sn-ps 进行反序列化后,应将字段 filter 设置为定义为 "applicationFilter" 等的适当值。


    不过,问题中似乎使用了Gson,其@SerializedName也允许alternate参数中的多个版本:

    @Data
    class PojoForGson {
        private String url;
        private int orderId;
        private String imageId;
    
        @SerializedName(value = "cellFilter" alternate = {"applicationFilter",  "tissueFilter"})
        private String filter;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多