java - 字段上的 @JsonProperty 注释以及 getter/setter

标签 java json serialization jackson

我继承了在 getter/setter 上有 @JsonProperty 注释的某个位代码。目的是当使用 Jackson 库序列化对象时,字段具有该特定名称。

当前代码:

private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

现在对于另一个工具,我还需要使用 JsonProperty 对字段进行注释。所以这将是我更改的代码:

@JsonProperty("FILENAME")
private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

是否有人在字段和 getter/setter 上都使用了相同的注释?我在网上四处张望,但没有看到任何东西。

我已经编译并运行了代码,但我不确定这是否会导致任何问题。对此有什么想法吗?

最佳答案

根据一些测试,我的观察结果是,与属性名称不同的名称都会生效:

例如。考虑对您的情况稍作修改:

@JsonProperty("fileName")
private String fileName;

@JsonProperty("fileName")
public String getFileName()
{
    return fileName;
}

@JsonProperty("fileName1")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

fileName 字段和方法 getFileName 都具有正确的属性名称 fileName 并且 setFileName 具有不同的 fileName1,在这种情况下,Jackson 将在反序列化时在 json 中查找 fileName1 属性,并将创建一个名为 fileName1 的属性序列化点。

现在,谈到你的情况,所有三个 @JsonProperty 都不同于 fileName 的默认属性名,它只会选择其中一个作为属性(FILENAME ),并且如果这三个中的任何一个不同,则会引发异常:

java.lang.IllegalStateException: Conflicting property name definitions

关于java - 字段上的 @JsonProperty 注释以及 getter/setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526874/

相关文章:

java - 在anyRequest之后无法配置antMatchers(多个antMatcher)

javascript - 单击按钮时获取新的 JSON 对象 (jQuery)

javascript - 如何从包含 ISODate 的 BSON 字符串创建 JSON 对象

java - 即使存在默认构造函数,也无法从对象值反序列化(没有基于委托(delegate)或属性的创建者)

ruby - 无法将 BigDecimal 强制转换为 BigDecimal

java - 按 HashMap 的值(按映射的值比较)对 HashMap 的数组列表进行排序

java - Eclipse 错误 : java. lang.CharSequence 无法解析

Java 8 : grouping field values by field names

json - 在 Go 中将映射转换为字符串

java - 离线同步 Android 应用的通用架构