fastjson属性名设置为PascalCase、SnakeCase、KebabCase策略的正确姿势
官方解释:PropertyNamingStrategy_cn · alibaba/fastjson Wiki · GitHub
fastjson缺省使用CamelCase,在1.2.15版本之后,fastjson支持配置PropertyNamingStrategy,支持如下四种:
name | demo |
---|---|
CamelCase | persionId |
PascalCase | PersonId |
SnakeCase | person_id |
KebabCase | person-id |
使用方式1
SerializeConfig config = new SerializeConfig(); // 生产环境中,config要做singleton处理,要不然会存在性能问题
config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;Model model = new Model();
model.personId = 1001;
String text = JSON.toJSONString(model, config);
Assert.assertEquals("{\"person_id\":1001}", text);ParserConfig parserConfig = new ParserConfig(); // 生产环境中,parserConfig要做singleton处理,要不然会存在性能问题
parserConfig.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
Model model2 = JSON.parseObject(text, Model.class, parserConfig);
Assert.assertEquals(model.personId, model2.personId);
(1)可以写线程安全的单例工具类
(2)可以通过springxml方式或者java config方式构造单例的SerializeConfig的bean,在需要的地方注入使用即。建议命名为对应风格名称+SerializeConfig,如snakeCaseSerializeConfig。
使用方式2:基于JSONType配置PropertyNamingStrategy
@JSONType(naming=PropertyNamingStrategy.SnakeCase)
public class Cat {private String name;private Integer age;private String sex;private String testThis;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getTestThis() {return testThis;}public void setTestThis(String testThis) {this.testThis = testThis;}
}
public class FastJsonTest {@Testpublic void propertyNamingStrategyTest(){Cat cat = new Cat();cat.setName("张三");cat.setAge(0);cat.setSex("male");cat.setTestThis("testIt");Assert.assertEquals("{\"age\":0,\"name\":\"张三\",\"sex\":\"male\",\"test_this\":\"testIt\"}", JSON.toJSONString(cat) );}
}
方式3:Spring单例bean方式
@Configuration
public class FastJsonSerializeConfig {@Bean("snakeCaseSerializeConfig")@Scope("singleton")public SerializeConfig snakeCaseSerializeConfig() {SerializeConfig config = new SerializeConfig();config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;return config;}@Bean("pascalCasSerializeConfig")@Scope("singleton")public SerializeConfig pascalCasSerializeConfig() {SerializeConfig config = new SerializeConfig();config.propertyNamingStrategy = PropertyNamingStrategy.PascalCase;return config;}
}
单元测试
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class FastJsonTest {@Resource(name = "snakeCaseSerializeConfig")private SerializeConfig snakeCaseSerializeConfig;@Resource(name = "pascalCasSerializeConfig")private SerializeConfig pascalCasSerializeConfig;@Testpublic void propertyNamingStrategyTest2(){Cat cat = new Cat();cat.setName("张三");cat.setAge(0);cat.setSex("male");cat.setTestThis("testIt");System.out.println(JSON.toJSONString(cat,pascalCasSerializeConfig));System.out.println(JSON.toJSONString(cat,snakeCaseSerializeConfig));Assert.assertEquals("{\"age\":0,\"name\":\"张三\",\"sex\":\"male\",\"test_this\":\"testIt\"}", JSON.toJSONString(cat,snakeCaseSerializeConfig) );}}
修改全局缺省的命名策略
SerializeConfig.getGlobalInstance().propertyNamingStrategy = PropertyNamingStrategy.PascalCase;
另外由于fastjson的策略是枚举方式,暂时不支持自定义新的统一的属性名策略,如果有其他需求可以通过
@JSONField(name = "xxx")来指定每个属性的名称。
fastjson属性名设置为PascalCase、SnakeCase、KebabCase策略的正确姿势相关推荐
- java 将A对象的值copy到B对象(根据属性名设置属性值)
package com.zyhao.openec.catalog.pojo; import java.lang.reflect.Field; import java.lang.reflect.Invo ...
- 行号 设置vim_在VSCode里面配置Vim正确姿势(细节解析)
一.导论 对于不用vim的人来说,vim简直是个噩梦,复杂的指令.丑陋的界面.令人头痛的配置文件,任何一项都足以劝退一大波人,但是对于已经习惯了使用vim的人来说,vim简直就是马良神笔,似乎vim除 ...
- 根据属性名获取、设置属性值
1.根据属性名获取属性值 可以通过JDK自带的反射下的getClass下的getDeclaredField并传递一个属性名字来获取该属性 属性名:fileName,对象:Object object: ...
- java根据属性获取对象_java反射工具类--通过指定属性名,获取/设置对象属性值
java对象通过点运算符操作对象属性的方式没法使用for,while等循环,此工具主要解决这一问题. 例如:有一对象包含属性有一定规律 obj1: { name1: "张三", a ...
- C#通过属性名字符串获取、设置对象属性值
目录 #通过反射获取对象属性值并设置属性值 0.定义一个类 1.通过属性名(字符串)获取对象属性值 2.通过属性名(字符串)设置对象属性值 #获取对象的所有属性名称及类型 #判断对象是否包含某个属性 ...
- Swagger 属性名 FastJson支持,@ApiModelProperty无法序列化
转自:https://my.oschina.net/wallxue/blog/1559736 在Swagger 里面默认用的是Jackson 序列化 对于我们属性全是用的FastJson的来说的话 很 ...
- js 对象动态添加/设置属性名和属性值
访问对象属性一共有两种方法:点获取法和方括号获取法. 有一个对象 Obj = {"Name":"xiaoming","AGE":" ...
- 【JS】js给对象动态添加、设置、删除属性名和属性值
1. 访问对象属性 js中访问对象属性一共有两种方法:点获取法和方括号获取法. let user = { // 一个对象name: "John", // 键 "name& ...
- 设置字体大小用css的哪个属性,css设置字体大小的属性名是什么
css设置字体大小的属性名是"font-size",该属性使用css中表示尺寸的单位(px.em.rem等)设置字体大小,也可以使用百分号等单位来设置.实际上font-size设置 ...
- css设置个性字体大小,css设置字体大小的属性名是什么
css设置字体大小的属性名是"font-size",该属性使用css中表示尺寸的单位(px.em.rem等)设置字体大小,也可以使用百分号等单位来设置.实际上font-size设置 ...
最新文章
- 李彦宏的百度 AI 落地战略,由王海峰来实现
- java学习(159):两个线程共同完成1到100计算
- 图象关于y轴对称是什么意思_数学概念丨“图象”与“图像”是有区别的 ,你知道吗?...
- 数据库和ORMS:使用SQLAlchemy与数据库通信
- 使用TweenMax更方便的创建连续的运动。
- 全球首款5G手机来了?三星Galaxy S10 5G版或于4月5日开卖
- 如何在同一地方组建多个 ZigBee 网络
- python利器能下载库吗_效率倍增!5款超级好用的Python工具库!
- 标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号
- CentOS 6虚拟机Hadoop安装教程
- python键盘输入字典类型_python数据类型——字典类型
- PHP对接抖音开发平台接口
- linux系统路由器地址查询,查找路由器登录IP地址指南
- 手机点餐系统概述_基于Android无线点餐系统的设计与实现
- keras使用load_weights遇到报错
- WFA发布LTE-U共存测试计划 Wi-Fi和LTE-U将公平共享频谱
- 一个很好的看电子书的软件
- Python 樱花树
- 树莓派综合项目2:智能小车(一)四轮驱动
- Layabox开发微信小游戏好友排行榜功能流程