杰克逊反序列化和序列化具有不同的字段名称

问题描述

我有一堂课,我想对Jackson进行反序列化和序列化。目前这就是我所拥有的

class Person {
    @JsonAlias("fullName")
    @JsonDeserialize(using = NameDeserializer.class)
    String name;
}

我希望能够从{"fullName": "John Doe"}读取并写入{"name": "John Doe"}

我还使用Lombok创建了setter和getter,所以我不能在方法级别使用@JsonProperty。任何想法我将如何处理,因为目前看来@JsonAlias不能按预期工作。我正在使用Jackson 2.10映射对象。

编辑

使用Alias效果很好。虽然在第一次弄清楚它是如何工作的,但我还是改写了龙目岛二传手

@JsonProperty("firstName")
public void setName(String name){
    this.name = name;
}

从这里我发现我的反序列化器实际上是问题所在。

解决方法

只需删除自定义反序列化器,然后使用@JsonProperty注释该字段,即可使您的方案起作用:

class Person {
    @JsonAlias("fullName")
    @JsonProperty
    String name;
}

自定义反序列化器控制反序列化的完成方式,因此别名可能会被忽略。

,

您可以将JsonProperty批注与此处https://github.com/FasterXML/jackson-annotations

一起使用,并带有属性
public class Name {
    @JsonProperty("firstName")
    public String _first_name;
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...