Nam*_*man 0 java json jackson deserialization fasterxml
我们在服务代码中将模型定义为-
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class SomeData {
public boolean tnAvailable;
@NonNull
public String sTempChange;
public boolean isTnAvailable() {
return faAvailable;
}
public void setTnAvailable(boolean faAvailable) {
this.faAvailable = faAvailable;
}
@Nonnull
public String getSTempChange() {
return sTempChange;
}
public void setSTempChange(@Nonnull String sTempChange) {
this.sTempChange = sTempChange;
}
}
Run Code Online (Sandbox Code Playgroud)
当查询包含上述模型的api作为响应时,我们得到的响应为-
"someData": {
"tnAvailable": true,
"stempChange": "trial_001"
}
Run Code Online (Sandbox Code Playgroud)
使我们感到惊讶的是stempChange(注意小写t)而不是sTempChange响应的属性。
在API调用期间对对象进行序列化和反序列化时,怀疑原因是Jackson com.fasterxml.jackson.core:jackson-core:2.5.2,因为我们没有使用任何其他getter-setter ot包装器来更改属性。为什么会发生这种情况,并且序列化/反序列化是寻找此结果的正确方向?
编辑 -从@Windle发表的评论中,尝试解释这里的不同之处。我再次重申: “尽管那里的问题在很大程度上与相同的情况有关。但是我也期待在fastxml中实现和编写文档的原因。”
在getter / setter中处理多个前导大写字母(例如“ getURL()”或“ getFName()”)。默认情况下,Jackson会简单地将所有前导大写字母都小写,并给出“ url”和“ fname”。但是,如果启用了MapperFeature.USE_STD_BEAN_NAMING(在Jackson 2.5中添加),它将遵循Java Bean命名约定,这只是小写一个大写的前导字母。如果找到多个,则不执行任何操作。这将导致属性“ URL”和“ FName”。
| 归档时间: |
|
| 查看次数: |
1492 次 |
| 最近记录: |