Java对象转Json,关于@JSONField对象字段重命名和顺序问题
Java对象转Json,@JSONField对象字段重命名和顺序
一、引入maven依赖
二、字段重命名
1.创建一个测试实体
2.将实体转换为json字符串,看看未转换前的效果
{
"businessLicenseCopy":"1",
"businessLicenseNumber":"2",
"businessTime":"6",
"companyAddress":"5",
"legalPerson":"4",
"merchantName":"3"
}
3.我们要转换为带下划线的key,例如把businessLicenseCopy转换为business_license_copy
我们需要修改实体,加上注解@JSONField
4.加上注解后打印转换后的json
{
"business_license_copy":"1",
"business_license_number":"2",
"business_time":"6",
"company_address":"5",
"legal_person":"4",
"merchant_name":"3"
}
三、字段排序
1.我们输出打印的json是这样的
{
"business_license_copy":"1",
"business_license_number":"2",
"business_time":"6",
"company_address":"5",
"legal_person":"4",
"merchant_name":"3"
}
我们想按照一定的顺序重新排序key
2.在@JSONField注解加上排序ordinal
3.输出打印转换后的实体:
System.out.println(JSONObject.toJSONString(new LkWeChatBusinessLicenseInfo()));
{
"business_license_copy":"1",
"business_license_number":"2",
"merchant_name":"3",
"legal_person":"4",
"company_address":"5",
"business_time":"6"
}
小结:重命名除@JSONField,还有@JsonProperty、@SerializedName;@JsonProperty主要用于入参转换,和Json字符串序列化为Java对象;@SerializedName 改变了默认序列化和默认反序列化的字段取值;
@JSONField注解常用的使用场景
应用场景:
当我们在与前端进行交互时,前端想要的字段与我们提供的字段名不同,这时候一种解决方案是修改实体类,但如果该实体类应用的比较多,那改起来的代价太大,因此,可以使用注解@JSONField来实现替换效果,用法如下:
一、JSON内容与实体类,@JSONField常规写法
JSON(与下述JSON字符串内容一致)
实体类(AppleDO.java)
二、JSON字符串转对应Java对象
执行代码
运行结果
三、支持序列化和反序列化
源码中的序列化和反序列化默认值均为true,则默认情况下是允许该字段序列化和反序列化的,如下:
使用方法(以下不支持序列化,支持反序列化)
当我们的某些字段为空值时,我们仍希望将此字段返回到前端(该配置可以返回带有空字段的字符串,但是当字段为基本数据类型时无效,须将其转换为包装类)
四、指定字段顺序
将Java对象转换为JSON格式,转换后的字段顺序会根据首字母来排序,亦可通过如下方式来指定字段顺序:
执行代码
加ordinal参数之前运行结果
加ordinal参数之后运行结果
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程学习网。