【问题标题】:How to avoid the Conflicting getter definitions for property with same attribute name with different datatype如何避免具有相同属性名称和不同数据类型的属性的冲突 getter 定义
【发布时间】:2020-03-05 05:16:49
【问题描述】:

有什么方法可以避免属性“内存”的冲突 getter 定义,它是在运行时生成的,我们无法更改结构,

{
"memory": "not_available"
}

{
"memory": {
    "data1": 0,
    "data2": 2,
}
}

我有 1 个具有不同数据类型的属性以及如何处理我使用 fastxml api 的场景

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "memory"
})

public class MyMemoryData{
     @JsonProperty("memory")
     private Memory memory;

     @JsonProperty("memory")      
     private String memoryValue;
     }

获取属性“memory”的以下异常冲突的getter定义:

【问题讨论】:

  • 拥有 2 个同名属性的设计非常糟糕。
  • 我明白,但是这个设计不能改变,因为它是从服务器自动生成的,所以需要一个解决方案来解决它。

标签: java spring jackson fasterxml


【解决方案1】:

您确定“内存”字段确实需要两个不同的字段吗?我的意思是,你只能使用私有内存吗?如果它是“not_available”,则设置为null?

如果是(“not_available” == null),您可以为内存字段编写自定义 Jackson 反序列化器,它将实现逻辑:如果值为“not_available”,则返回 null,否则解析对象。

【讨论】:

  • 您是否强调使用以下内容,@JsonInclude(JsonInclude.Include.NON_NULL) @JsonPropertyOrder({ "memory" }) public class MyMemoryData{ @JsonProperty("memory") ("not_available" = = null) 私有内存内存; }
  • 是的,我不完全了解您的用例,但它看起来像有效的@JsonInclude(JsonInclude.Include.NON_NULL) @JsonPropertyOrder({ "memory" }) public class MyMemoryData{ @JsonProperty("memory") private Memory memory; // null if 'not_available' }
猜你喜欢
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多