20190608 JavaBean转jsonString时首字母大写的问题
JavaBean转jsonString时首字母大写的问题
这次出差,对接第三方发行系统,又出现了大驼峰命名的json字符串,因此做个笔记记录下。
约定俗成的,JavaBean的属性采用小驼峰命名法。但是,在对接接口的过程中,如果是要去接入别人的接口,如果对方没有使用约定俗成的小驼峰命名,那么也只能自己做出调整适配了。
这样的事情也遇到过几次了。有的是对接自己公司php的接口,有的是对接第三方系统的接口。也许在其他的编程语言中,他们约定俗成的是采用大驼峰命名法,可能有的是全大写。
在编写代码的时候,使用工具类将JavaBean转Json字符串是很常见的操作,或出于打印javaBean,或出于调接口时传输Json格式字符串参数。如果我们希望打印出来的是大驼峰命名或者全大写的属性名,则会发现没有那么简单。
假设有个车辆信息类VehicleInfo:
public class VehicleInfo{private String plateColor;private String plateNo;//省略getter、setter方法
}
使用com.alibaba.fastjson.JSON
将bean转json字符串,得到的是:
{"plateColor":"1","plateNo":"京A12345"}
如果,我们希望打印出来的是属性名是大驼峰命名的或者全大写的(确实是有这样的场景),我们可能会这样定义类:
public class VehicleInfo{private String PlateColor;private String PlateNo;//省略getter、setter方法
} //将bean转json字符串,得到的是:
//{"plateColor":"1","plateNo":"京A12345"}
以及
public class VehicleInfo{private String PlateColor;private String PlateNo;//省略getter、setter方法
} //将bean转json字符串,得到的是:
//{"pLATECOLOR":"1","pLATENO":"京A12345"}
由上可知,打印出来的json字符串并没有出现我们预期的结果。
实际上,属性是通过其getter方法和setter方法来操作的。因此,属性名为大驼峰的PlateNo或者小驼峰的plateNo,其默认生成的get方法和set方法都是一样的:setPlateNo和getPlateNo。而在java语言中,对于属性名约定俗成的使用小驼峰命名。因此对于setPlateNo,其属性值是plateNo。
同理,如果属性为PLATENO,其默认生成的get方法为getPLATENO。由小驼峰命名得到其属性名为pLATENO,因此出现了上面那些意料之外的结果。
解决方法
既然在Java中,约定俗成的属性名就是采用小驼峰命名,以上面例子为例,属性名还是写为:plateColor
和plateNo
。
解决方法1:@JSONField
大驼峰命名,代码如:
public class VehicleInfo{@JSONField(name = "PlateColor")private String plateColor;@JSONField(name = "PlateNo")private String plateNo;//省略getter、setter方法
}
//打印结果:(预期的结果)
//{"PlateColor":"1","PlateNo":"京A12345"}
全大写命名,代码如:
public class VehicleInfo{@JSONField(name = "PLATECOLOR")private String plateColor;@JSONField(name = "PLATENO")private String plateNo;//省略getter、setter方法
}
//打印结果:(预期的结果)
//{"PLATECOLOR":"1","PLATENO":"京A12345"}
解决方法2:使用PascalNameFilter
普通的,我们这种方式将bean转成json字符串:
System.out.println(JSON.toJSONString(bean);
这时,如果要输出大驼峰命名的Json字符串,可以在JSON.toJSONString方法后面加多一个参数:
//com.alibaba.fastjson
System.out.println(JSON.toJSONString(resultDTO,new PascalNameFilter()))
这样,打印出来的java字符串就是首字母大写的了,其实现效果也好理解,就是将属性名中的首字母全部替换为大写:
if (name != null && name.length() != 0) {char[] chars = name.toCharArray();chars[0] = Character.toUpperCase(chars[0]);String pascalName = new String(chars);return pascalName;
} else {return name;
这种方式使用很方便,但只适用于输出大驼峰命名的json字符串。
最后
以上是两种解决的方法。再不然,还可以自己实现。但是需要注意的是要考虑json的嵌套。
这次出差,有一点感悟是:有的时候,对于一些问题,不要揪得太细,否则可能会影响进度,以及错过其他的一些业务的知识。
20190608 JavaBean转jsonString时首字母大写的问题相关推荐
- 单行文字、多行文字溢出时省略号表示的多种解决方式;调整字符间距;段落首字母大写缩进效果;
文本溢出省略号表示的实现效果: 1.解决单行文字溢出: 解决方式: 在文字容器样式中添加 overflow:hidden; text-overflow:ellipsis; white-space: n ...
- java bean 首字母大写_javaBean命名规范 get / set 后的首字母大写
javaBean命名规范 Sun 推荐的命名规范 1 ,类名要首字母大写,后面的单词首字母大写 2 ,方法名的第一个单词小写,后面的单词首字母大写 3 ,变量名的第一个单词小写,后面的单词首字母大写 ...
- fastjson.android首字母大写转化问题
fastjson.android首字母大写转化问题 使用fastjson转化javabean成json大写首字母变成小写 如果使用的是fastjson的完整版本,可以全局设置 TypeUtils.co ...
- java set get大写_javaBean命名规范 get / set 后的首字母大写
javaBean命名规范 Sun 推荐的命名规范 1 ,类名要首字母大写,后面的单词首字母大写 2 ,方法名的第一个单词小写,后面的单词首字母大写 3 ,变量名的第一个单词小写,后面的单词首字母大写 ...
- 使字符串的首字母大写(具有最佳性能)
我有一个带TextBox的DetailsView ,并且我希望输入数据 总是始终用首字母大写保存 . 例: "red" --> "Red" "r ...
- python字符串的切片方式是[n、m、不包括m_python字符串的操作(去掉空格strip(),切片,查找,连接join(),分割split(),转换首字母大写, 转换字母大小写...)...
#可变变量:list, 字典 #不可变变量:元祖,字符串 字符串的操作(去掉空格, 切片, 查找, 连接, 分割, 转换首字母大写, 转换字母大小写, 判断是否是数字字母, 成员运算符(in / no ...
- Python——如何将不规范的英文名字转化为“首字母大写,其他字母小写”的规范名字
1 致谢 感谢菜鸟教程的指导, 原文链接如下: https://www.runoob.com/python/att-string-format.html 2 前言 今天在学习Python中的函数式编程 ...
- 如何在JavaScript中将字符串的首字母大写?
如何使字符串的第一个字母大写,但不更改其他任何字母的大小写? 例如: "this is a test" -> "This is a test" " ...
- pta 循环——首字母大写
本题目要求编写程序,输入一行字符,将每个单词的首字母改为大写后输出.所谓"单词"是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个. 输入格式: 输入给出一行字符. ...
最新文章
- r软件linux 安装失败,R语言在Linux环境下安装Curl出错问题的解决
- 用python做频数分析_使用Python进行描述性统计
- LeetCode 283. Move Zeroes
- xp系统能支持mysql_windowsxp下的mysql集群技术
- 如果不考虑钱和面子,你最想做什么工作?
- Nginx 配置学习
- 数组赋偶数值并求出平均值
- mac下nginx搭建
- php mysql源码包,linux下Apache+PHP+mysql+phpMyAdmin源码包安装配置
- mysql用root账户建立用户和赋予权限
- IP地址规划之子网划分
- 单片机胡汉才第四版答案_单片机课后习题答案--胡汉才编
- 【破解APP抓包限制】Xposed+JustTrustMe关闭SSL证书验证
- 【antdesign】表单布局和校验
- Python 自然语言处理笔记(五)——信息检索系统,基于Lucene实现
- three doors
- Coding life,云栖社区的个性化首页上线
- BeanUtils怎么没有populate方法
- Allegro在PCB中区域规则设置方法
- ACE的CDR中的字节对齐问题
热门文章
- Java 简易五子棋游戏的编写
- 哪些专业不建议跨考计算机
- 项目经理等级划分,看看你在哪一级?
- java实现打印金字塔
- 阿里P6员工炫耀:年薪60万,哪家外企接的住阿里的员工?
- post 防篡改_如何防止http请求数据被篡改
- 盐城工业职业技术学院计算机没用过,2020年江苏软考盐城工业职业技术学院考点参考人数266人...
- Linux与网络服务(一)网络服务相关概念通俗解释(科普向)
- 在升龙备份方法_[求助]关于使用再生龙备份系统的问题
- 台式电脑如何修复计算机,大神告诉你电脑不断重启如何修复