Jackson 中的那些坑

Author Avatar
Pang Jian 10月 30, 2015
总字数:502 预计阅读:1 min
  • 在其它设备中阅读本文章

不符合驼峰规范的变量

“驼峰命名法”请自行百度。简单的来说就是变量的第一个单词以小写字母开始其他单词首字母大写,或者全部单词首字母都大写,分别称为“小驼峰”和“大驼峰”

比如一个符合驼峰规范命名的实体:

public class Entity {
    String beFlag;
    public String getBeFlag() {return beFlag;}
    public void setBeFlag(String beFlag) {beFlag = beFlag;}
}

转化的 JSON 为:

{"beFlag":null}

前段时间走查代码时发现一个问题,实体中有一个字段为 ECash。驼峰规范中并没有详细说明这种单词只有一个字母的变量是否符合驼峰规范。当遇到这种变量时,转化的 JSON 发送了问题,我们的预期应该是这样的

{“eCash”:null}

但实际情况是这样的

{“ecash”:null}

没错,字母全部被小写了。这可是个大问题,接口文档按经验肯定是错的。
如何解决呢?
当然是尽量按照驼峰规范命名变量,如果不行,那就得使用注解的方式。
Jackson 提供了” JsonProperty”注解方式,使用如下代码

public class Entity {
    @JsonProperty
    String ECash;

    public String getECash() {return ECash;}

    public void setECash(String eCash) {ECash = eCash;}
}

得到的 JSON 结果为

{"ECash":null,"ecash":null}

虽然我们希望的”ECash“来了,但是之前全小写的还存在。这是因为 ECash 的 get 方法,使用 @JsonIgnore 即可解决。代码变成这样:

public class Entity {
    @JsonProperty
    String ECash;

    @JsonIgnore
    public String getECash() {return ECash;}

    public void setECash(String eCash) {ECash = eCash;}
}

得到的 JSON 结果为:

{"ECash":null}

至此,问题解决了。除此之外,JsonProperty 还可以指定 JSON 中的值,比如这样:

public class Entity {@JsonProperty("eCash")
    String ECash;

    @JsonIgnore
    public String getECash() {return ECash;}
    public void setECash(String eCash) {ECash = eCash;}
}

即指定 JSON 的结果为小驼峰模式。

{"eCash":null}

举一反三,JsonProperty 的使用场景还有很多,除了解决这个“坑”以外。还可以直接用来转换类 UNIX 习惯的下划线间隔的变量转化为驼峰规范。

Documentation licensed under CC BY-SA 4.0.
本文链接:https://www.pangjian.me/2015/10/30/json-and-java-object2/