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

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

一、样例展示

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") 解决序列化和反序列化问题
 
注意:我亲自测试这两种数据返回都没有正常将对象的属性设置为大写,默认都是小写返回;
代码展示:
@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 相关设置

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

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

posted @ 2021-09-09 19:08  菜鸟的奋斗之路  阅读(615)  评论(0编辑  收藏  举报