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

我已经inheritance了一些在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上使用了相同的注解? 我在网上环顾四周,但什么也没看见。

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

我基于一些testing的观察结果是,无论名称与属性名称有什么不同,都是有效的:

例如。 考虑你的情况的一个轻微的修改:

 @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属性,并在该点处创build一个名为fileName1的属性序列化。

现在,来看看你的情况,所有这三个@JsonProperty与fileName的默认属性名称不同,它只会select其中的一个作为属性( FILENAME ),并且三者中的任何一个不同,它会引发exception:

 java.lang.IllegalStateException: Conflicting property name definitions 

除了现有的良好答案之外,请注意Jackson 1.9通过添加“财产统一”来改进处理,这意味着逻辑属性的不同部分的所有注释都将使用(希望)直观的优先级进行组合。

在Jackson 1.8和之前的版本中,只有字段和getter注释被用来确定什么以及如何序列化(编写JSON)。 只有和setter注解反序列化(阅读JSON)。 这有时需要添加“额外”注释,如注释getter和setter。

随着jackson1.9及以上这些额外的注释是不需要的。 仍然可以添加这些; 如果使用不同的名称,可以创build“分割”属性(使用一个名称进行序列化,使用其他名称进行反序列化):这对于重命名有时很有用。