Oce*_*lue 50 java serialization json 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;
}
Run Code Online (Sandbox Code Playgroud)
现在换另一个工具,我需要用JsonProperty来注释该字段.所以这将是我改变的代码:
@JsonProperty("FILENAME")
private String fileName;
@JsonProperty("FILENAME")
public String getFileName()
{
return fileName;
}
@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
this.fileName = fileName;
}
Run Code Online (Sandbox Code Playgroud)
有没有人在这两个领域使用相同的注释 - 领域以及吸气剂/安装者?我环顾四周,但没有看到任何东西.
我已编译并运行代码,但我不确定这是否会导致任何问题.有什么想法吗?
Bij*_*men 45
我基于一些测试的观察结果是,与属性名称不同的名称是生效的名称:
例如.考虑稍微修改一下你的案子:
@JsonProperty("fileName")
private String fileName;
@JsonProperty("fileName")
public String getFileName()
{
return fileName;
}
@JsonProperty("fileName1")
public void setFileName(String fileName)
{
this.fileName = fileName;
}
Run Code Online (Sandbox Code Playgroud)
这两个fileName字段,方法getFileName,有正确的属性名称fileName,并setFileName具有不同的一个fileName1,在这种情况下,杰克逊将寻找一个fileName1在反序列化的点JSON属性,会创建一个名为属性fileName1的序列化的地步.
现在,来到你的情况,所有三个@JsonProperty都与默认的属性名不同fileName,它只选择其中一个作为属性(FILENAME),并且三个不同的任何一个,它会引发异常:
java.lang.IllegalStateException: Conflicting property name definitions
Run Code Online (Sandbox Code Playgroud)
除了现有的好答案之外,请注意Jackson 1.9通过添加"属性统一"来改进处理,这意味着使用(希望)直观优先级来合并来自逻辑属性的不同部分的所有注释.
在Jackson 1.8和之前的版本中,在确定序列化的内容和编写方式时,只使用了字段和getter注释(编写JSON); 并且仅用于反序列化的setter注释(读取JSON).这有时需要添加"额外"注释,例如注释getter和setter.
使用Jackson 1.9及以上版本时,不需要这些额外的注释.仍然可以添加那些; 如果使用不同的名称,可以创建"拆分"属性(使用一个名称进行序列化,使用其他名称进行反序列化):这有时可用于重命名.
| 归档时间: |
|
| 查看次数: |
93044 次 |
| 最近记录: |