@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“分割”属性(使用一个名称进行序列化,使用其他名称进行反序列化):这对于重命名有时很有用。