You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Jackson同一字段配置读写场景不同的@JsonProperty规则

可行解决方案

方案1:使用@JsonAlias简化配置(推荐,代码改动最小)

@JsonAlias是Jackson 2.9+提供的注解,仅作用于反序列化阶段,允许属性接收指定别名的输入,不会影响序列化阶段的输出字段名,完全匹配你的需求,调整后的Mix-in代码如下:

@JsonDeserialize(converter = StandingSanitizer.class)
public abstract class StandingMixIn {
    // 保留原有配置:反序列化忽略赋值,序列化正常输出
    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    Integer positionNumber;

    // 反序列化时可接收 position 字段输入,序列化时正常输出为 positionText
    @JsonAlias("position")
    String positionText;
}

该方案不用修改其他逻辑,直接替换原有Mix-in即可生效,不需要额外配置。

方案2:拆分Mix-in的方法级注解(兼容低版本Jackson)

如果你使用的Jackson版本低于2.9不支持@JsonAlias,可以通过在Mix-in中模拟对应属性的get/set方法,分别配置读写规则,字段级的注解可以完全移除:

@JsonDeserialize(converter = StandingSanitizer.class)
public abstract class StandingMixIn {
    // -------------------------- positionNumber 配置 --------------------------
    // 反序列化时忽略setter赋值
    @JsonIgnore
    public void setPositionNumber(Integer positionNumber) {}
    // 序列化时正常输出字段
    @JsonProperty("positionNumber")
    public Integer getPositionNumber() { return null; }

    // -------------------------- positionText 配置 --------------------------
    // 反序列化时接收position字段输入
    @JsonProperty("position")
    public void setPositionText(String positionText) {}
    // 序列化时输出positionText字段
    @JsonProperty("positionText")
    public String getPositionText() { return null; }
}

Jackson处理属性读写时会优先匹配get/set方法上的注解,二者配置互不干扰,可完全实现读写阶段不同的字段映射规则。

内容的提问来源于stack exchange,提问作者Marcel Overdijk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:54:03