不符合驼峰规范的变量

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

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

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习惯的下划线间隔的变量转化为驼峰规范。

Jackson中的那些坑的更多相关文章

  1. 记录Jackson和Lombok的坑

    记录Jackson和Lombok的坑 今天遇到Jackson反序列化json缺少了字段,后来研究下发现是Jackson的机制和Lombok生成的setter不一致,导致没有正确调用setter. 复现 ...

  2. 整理iOS9适配中出现的坑(图文)

    原文: http://www.cnblogs.com/dsxniubility/p/4821184.html 整理iOS9适配中出现的坑(图文)   本文主要是说一些iOS9适配中出现的坑,如果只是要 ...

  3. jackson中JSON字符串节点遍历和修改

    有些场景下,在实现一些基础服务和拦截器的时候,我们可能需要在不知道JSON字符串所属对象类型的情况下,对JSON字符串中的某些属性进行遍历和修改,比如,设置或查询一些报文头字段. 在jackson中, ...

  4. Nancy总结(二)记一次Nancy 框架中遇到的坑

    记一次Nancy 框架中遇到的坑 前几天,公司一个项目运行很久的Nancy框架的网站,遇到了一个很诡异的问题.Session 对象跳转到另外一个页面的时候,session对象被清空了,导致用户登录不上 ...

  5. 整理 iOS 9 适配中出现的坑(图文)(转)

    作者:董铂然 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版,随着 ...

  6. 整理 iOS 9 适配中出现的坑

    本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版,随着有用户陆续升级 ...

  7. 整理 iOS 9 适配中出现的坑(图文)

    作者:董铂然 授权本站转载. 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iO ...

  8. iOS内购(IAP)中的那些坑

    公司的公共库原来并没有这部分的代码,以前做内购是用两个比较有名的github上的第三方库.一个叫MKStoreKit,另一个叫IAPManager,我看了一下写的都很辣鸡,使用起来很不方便,而且写的还 ...

  9. jquery 的 each 方法中 return 的坑

    jquery 的 each 方法中 return 的坑 Chapter 0 在项目中使用 jquery 的 each 方法时想在 each 的循环中返回一个布尔类型的值于是掉进一个坑中... Chap ...

随机推荐

  1. linux文件属性权限相关

    一个linux目录或者文件,都会有一个所属主和所属组. 所属主,即文件的拥有者,而所属组,即该文件所属主所在的一个组. linux文件属性 包括文件类型 - d  l  b c s 依次表示 普通文件 ...

  2. [C#]『CountdownEvent』任务并行库使用小计

    System.Threading.CountdownEvent  是一个同步基元,它在收到一定次数的信号之后,将会解除对其等待线程的锁定. CountdownEvent  专门用于以下情况:您必须使用 ...

  3. c#简单的Json解析类

    使用方法: 引用Newtonsoft.Json.dll文件,然后引用命名空间using Newtonsoft.Json.Linq;JsonDome中有实例,照做就行 现在贴上示例代码 using Ne ...

  4. php返回json数据函数实例

    本文实例讲述了php返回json数据函数的用法,分享给大家供大家参考.具体方法如下: json_encode()函数用法: ? 1 echo json_encode(array('a'=>'bb ...

  5. 如何在版本控制工具中管理Sencha Architect的項目

    根據數次痛苦的經歷結合stack overflow上的解答,發現原來還是可以使用svn.git之類的版本控制工具管理Sencha Architect生成的項目的. 具體的要點如下,假定項目記作{PRO ...

  6. #Leet Code# Convert Sorted Array to Binary Search Tree

    描述:递归 代码: class Solution: # @param num, a list of integers # @return a tree node def sortedArrayToBS ...

  7. uublog在线测试demo

    http://demo.uublog.me/ 后台 http://demo.uublog.me/admin/ 用户名/密码:admin/admin

  8. Http 状态码详解

    状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必须在 ...

  9. 数据结构练习 02-线性结构2. Reversing Linked List (25)

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

  10. Pentaho Data Integration Step: BD Procedure Call

    官网连接:http://wiki.pentaho.com/display/EAI/Call+DB+Procedure 描述 调用数据库存储过程步骤允许用户执行一个数据库存储过程,并且得到结果.存储过程 ...