Jackson 和 Fastjson 返回前台 Json 数据格式注意事项

  今天工作中 Json 序列化和反序列化时,出现属性字段重命名失效,为 NULL 的字段也需要返回,最终找到另一种解决方式搞定,分享出来!

一、样例展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Employee {
 
    @JSONField(name = "EMPLOYEE_ID")
    @JsonProperty(value = "EMPLOYEE_ID")
    @JsonAlias(value = "EMPLOYEE_ID")
    private String employeeId;
 
    @JSONField(name = "EMPLOYEE_NAME")
    @JsonProperty(value = "EMPLOYEE_NAME")
    @JsonAlias(value = "EMPLOYEE_NAME")
    private String employeeName;
 
}

二、解决⽅案

1)Spring Boot默认序列化框架Jackson处理(调⽤外部接⼝响应转为对象时,默认使⽤Jackson)
  添加注解 @JsonProperty(value = "EMPLOYEE_ID”) 解决序列化
  添加注解 @JsonAlias(value = "EMPLOYEE_ID") 解决反序列化
 
2)常⽤FastJson处理
  添加注解 @JSONField(name = "EMPLOYEE_ID") 解决序列化和反序列化问题
 
注意:我亲自测试这两种数据返回都没有正常将对象的属性设置为大写,默认都是小写返回;
代码展示:
1
2
3
4
5
6
7
8
9
10
11
12
13
@ResponseBody
@RequestMapping(path = "/test1", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public List<Employee> test1() {
    List<Employee> employees = Lists.newArrayList();
    return employees;
}
 
@ResponseBody
@RequestMapping(path = "/test2", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public String test2() {
    List<Employee> employees = Lists.newArrayList();
    return JSONObject.toJSONString(employees, SerializerFeature.WriteMapNullValue);
}

第一种方式,返回的员工对象属性为小写,不会转换为大写;

第二种方式,测试OK【默认属性为 NULL 的字段不展示】为 NULL 的属性也展示出来,使用 SerializerFeature.WriteMapNullValue 这个配置;

扩展知识,在以 Json 格式输出数据时,可以自行设置输出默认值:SerializerFeature 相关设置

1
2
3
4
WriteMapNullValue                 是否输出值为null的字段,默认为false
WriteNullListAsEmpty              List字段如果为null,输出为[],而非null
WriteNullNumberAsZero             数值字段如果为null,输出为0,而非null
WriteNullBooleanAsFalse           Boolean字段如果为null,输出为false,而非null

  每天进步一点点,加油......

posted @   菜鸟的奋斗之路  阅读(634)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示