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
每天进步一点点,加油......