fastjson属性名设置为PascalCase、SnakeCase、KebabCase策略的正确姿势

编程入门 行业动态 更新时间:2024-10-21 06:22:15

fastjson属性名<a href=https://www.elefans.com/category/jswz/34/1770411.html style=设置为PascalCase、SnakeCase、KebabCase策略的正确姿势"/>

fastjson属性名设置为PascalCase、SnakeCase、KebabCase策略的正确姿势

官方解释:PropertyNamingStrategy_cn · alibaba/fastjson Wiki · GitHub

fastjson缺省使用CamelCase,在1.2.15版本之后,fastjson支持配置PropertyNamingStrategy,支持如下四种:

namedemo
CamelCasepersionId
PascalCasePersonId
SnakeCaseperson_id
KebabCaseperson-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策略的正确姿势

本文发布于:2024-03-23 18:44:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1741548.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:设置为   姿势   属性   正确   策略

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!