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