官方解释: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策略的正确姿势相关推荐

  1. java 将A对象的值copy到B对象(根据属性名设置属性值)

    package com.zyhao.openec.catalog.pojo; import java.lang.reflect.Field; import java.lang.reflect.Invo ...

  2. 行号 设置vim_在VSCode里面配置Vim正确姿势(细节解析)

    一.导论 对于不用vim的人来说,vim简直是个噩梦,复杂的指令.丑陋的界面.令人头痛的配置文件,任何一项都足以劝退一大波人,但是对于已经习惯了使用vim的人来说,vim简直就是马良神笔,似乎vim除 ...

  3. 根据属性名获取、设置属性值

    1.根据属性名获取属性值 可以通过JDK自带的反射下的getClass下的getDeclaredField并传递一个属性名字来获取该属性 属性名:fileName,对象:Object object: ...

  4. java根据属性获取对象_java反射工具类--通过指定属性名,获取/设置对象属性值

    java对象通过点运算符操作对象属性的方式没法使用for,while等循环,此工具主要解决这一问题. 例如:有一对象包含属性有一定规律 obj1: { name1: "张三", a ...

  5. C#通过属性名字符串获取、设置对象属性值

    目录 #通过反射获取对象属性值并设置属性值 0.定义一个类 1.通过属性名(字符串)获取对象属性值 2.通过属性名(字符串)设置对象属性值 #获取对象的所有属性名称及类型 #判断对象是否包含某个属性 ...

  6. Swagger 属性名 FastJson支持,@ApiModelProperty无法序列化

    转自:https://my.oschina.net/wallxue/blog/1559736 在Swagger 里面默认用的是Jackson 序列化 对于我们属性全是用的FastJson的来说的话 很 ...

  7. js 对象动态添加/设置属性名和属性值

    访问对象属性一共有两种方法:点获取法和方括号获取法. 有一个对象 Obj = {"Name":"xiaoming","AGE":" ...

  8. 【JS】js给对象动态添加、设置、删除属性名和属性值

    1. 访问对象属性 js中访问对象属性一共有两种方法:点获取法和方括号获取法. let user = { // 一个对象name: "John", // 键 "name& ...

  9. 设置字体大小用css的哪个属性,css设置字体大小的属性名是什么

    css设置字体大小的属性名是"font-size",该属性使用css中表示尺寸的单位(px.em.rem等)设置字体大小,也可以使用百分号等单位来设置.实际上font-size设置 ...

  10. css设置个性字体大小,css设置字体大小的属性名是什么

    css设置字体大小的属性名是"font-size",该属性使用css中表示尺寸的单位(px.em.rem等)设置字体大小,也可以使用百分号等单位来设置.实际上font-size设置 ...

最新文章

  1. 李彦宏的百度 AI 落地战略,由王海峰来实现
  2. java学习(159):两个线程共同完成1到100计算
  3. 图象关于y轴对称是什么意思_数学概念丨“图象”与“图像”是有区别的 ,你知道吗?...
  4. 数据库和ORMS:使用SQLAlchemy与数据库通信
  5. 使用TweenMax更方便的创建连续的运动。
  6. 全球首款5G手机来了?三星Galaxy S10 5G版或于4月5日开卖
  7. 如何在同一地方组建多个 ZigBee 网络
  8. python利器能下载库吗_效率倍增!5款超级好用的Python工具库!
  9. 标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号
  10. CentOS 6虚拟机Hadoop安装教程
  11. python键盘输入字典类型_python数据类型——字典类型
  12. PHP对接抖音开发平台接口
  13. linux系统路由器地址查询,查找路由器登录IP地址指南
  14. 手机点餐系统概述_基于Android无线点餐系统的设计与实现
  15. keras使用load_weights遇到报错
  16. WFA发布LTE-U共存测试计划 Wi-Fi和LTE-U将公平共享频谱
  17. 一个很好的看电子书的软件
  18. Python 樱花树
  19. 树莓派综合项目2:智能小车(一)四轮驱动
  20. Layabox开发微信小游戏好友排行榜功能流程

热门文章

  1. ab测试Apache并发
  2. 【节选】吴恩达给出的AI职业生涯规划
  3. poj3034Whac-a-Mole(dp)
  4. 移动商城项目【总结】
  5. 基于Linux平台下分子建模软件的安装
  6. Oracle EBS XLA_EVENTS Table EVENT_STATUS_CODE 和 PROCESS_STATUS_CODE对应的代码及含义
  7. 【蓝桥杯每日一题】并查集算法
  8. 基于百科荣创主车电机驱动板程序 PID控制
  9. 软件压力测试卸压,气液增压爆破片泄压测试装置研究
  10. 2020年菜鸟学习SEO最重要的是什么