【问题标题】:Creating a custom Jackson Property Naming Strategy创建自定义 Jackson 属性命名策略
【发布时间】:2020-10-30 15:18:48
【问题描述】:

我调用的许多外部 API 都以这种格式“FIRST_NAME”返回对象字段。但是我想用驼峰式“firstName”将它们发送出去

没有将我拥有的每个对象标记为:

private String firstName;

@JsonGetter(“firstName”)
public String getFirstName(){
     returns firstName;
}

@JsonSetter(“FIRST_NAME”)
public void setFirstName(String firstName) 
{
this.firstName=firstName;
}

我尝试创建自定义 PropertyNamingStartegy,但无法使其正常工作。谁有解决办法?

【问题讨论】:

    标签: json spring-boot serialization jackson objectmapper


    【解决方案1】:

    从您的代码returns 中的拼写错误,我可以看到此代码是手动输入的。

    实际上,@JsonGetter@JsonSetter 上的不同名称应该可以工作。也许你有杰克逊定制,这会阻止它工作。如果没有看到您的完整代码,我几乎无法说出原因。无论如何,我会给你另一个解决方案。

    @JsonAlias 在反序列化期间定义备用名称。原始名称(在您的示例中为“firstName”)仍然有效。

    要么上场

    @JsonAlias("FIRST_NAME")
    private String firstName;
    

    @JsonSetter 方法

    private String firstName;
    
    @JsonGetter("firstName")
    public String getFirstName() {
        return firstName;
    }
    
    @JsonSetter
    @JsonAlias("FIRST_NAME")
    void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    

    完整的测试代码在Github。如果仍然无法正常工作,请 fork 我的存储库并更改为您的课程并进行测试,或者在 Github 上共享一个准备运行的项目以重现问题。

    【讨论】:

    • 是的,抱歉,是从我的手机输入的 :)。谢谢!这也有效。昨晚我实际上能够制作一个自定义对象映射器和属性命名策略,让我能够处理它。我有很多字段和类,所以我希望尽可能减少注释。
    猜你喜欢
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    相关资源
    最近更新 更多