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

我继承了在 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

https://stackoverflow.com/questions/11526874/

相关文章:

php - 从 PHP 中的 JSON POST 读取 HTTP 请求正文的问题

json - 使用逗号拆分 NSString

javascript - 如何使用 Typeahead.js 0.10 一步一步/远程/预取/本地

json - bash 中的转义字符(对于 JSON)

c# - 使用 Nancy 返回包含有效 Json 的字符串

json - Swift 4 可解码,直到解码时才知道 key

java - 更新 JSONObject 中的元素

json - JSON 表示中的链接关系

javascript - 即使有循环引用,如何将 DOM 节点序列化为 JSON?

json - 如何在 JSONPath 中按字符串过滤?