【问题标题】:Write-only properties with JacksonJackson 的只写属性
【发布时间】:2023-03-27 02:52:01
【问题描述】:

在我的实体类中,我正在尝试创建一个只写字段(在序列化过程中被忽略,但会正常反序列化)。

@JsonProperty
@JsonSerialize(using=NullSerializer.class)
public String getPassword() {
    return password;
}

几乎给了我我想要的:JSON 包含“密码”字段,但值始终为空。如何完全删除该字段?

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    你可以设置access值:

    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;
    

    【讨论】:

    • @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) 和 @JSONCreator 不起作用
    【解决方案2】:

    仅在 getter getPassword 上使用 @JsonIgnore,而不是使用 NullSerializer。然后在 setter 上也使用@JsonProperty("password")

    这应该允许 password 被反序列化,但序列化的 JSON 输出不会包含它。

    例如,一个“getter”方法将被忽略,除非另一个注释定义了替代方法使用方法。

    【讨论】:

    • JsonIgnore 也会阻止它被反序列化。这不是我想要的。
    • 抱歉,我确实只需要@JsonIgnore 吸气剂,但我刚刚测试过,我还需要将@JsonProperty 添加到吸气剂。也许这已经在不同版本中发生了变化,不知道。见编辑。
    • 是的,就是那个:@JsonProperty 在 setter 上,@JsonIgnore 在 getter 上。非常感谢。
    • 此行为取决于版本:在 1.8 及之前版本中,一个 @JsonIgnore 就足够了。但是 1.9 统一的属性处理(以减少常见情况的重复),并且您需要为这种“拆分”情况使用 2 个注释。
    • @StaxMan 澄清一下,我确信我过去只需要@JsonIgnore。很高兴知道我何时更新。
    猜你喜欢
    • 2020-02-22
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 2011-05-15
    • 2013-03-12
    • 2011-07-20
    相关资源
    最近更新 更多