zoukankan      html  css  js  c++  java
  • 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
    

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

  • 相关阅读:
    BZOJ 1192 鬼谷子的钱袋
    浅谈双连通分量、强连通分量
    BZOJ 1047 理想的正方形
    浅谈单调队列、单调栈
    django ORM之manytomany跨表
    django DateTimeField和DateField和TimeField
    django 一对多的添加记录create 和save 方法,update 更新和save()方法的区别,查询API的方法
    Python生成随机验证码
    obj.t2c.all-------django自动生成第三张多对多关系表中另一张表信息在前端的显示
    Form组件验证之ajax提交数据并显示错误信息
  • 原文地址:https://www.cnblogs.com/blogtech/p/15248452.html
Copyright © 2011-2022 走看看