• 记一次冲突:JsonSerialize注解标注的字段返回两次的错误


    在开发中,当某些字段为null时,在传递给前端后,为null的字段为过滤掉,不会返回给前端,可以由前端处理,也可以由后端处理,后端处理步骤如下

    1、新建类,继承JsonSerializer类

    1. package com.shuizhu.utils;
    2. import com.fasterxml.jackson.core.JsonGenerator;
    3. import com.fasterxml.jackson.databind.JsonSerializer;
    4. import com.fasterxml.jackson.databind.SerializerProvider;
    5. import org.springframework.context.annotation.Configuration;
    6. import java.io.IOException;
    7. /**
    8. * 返回前端时,把null字段修改为“”空字符串
    9. * @author 睡竹
    10. * @date 2022/8/25
    11. */
    12. @Configuration
    13. public class JacksonNotNullAsHorizontalBarSerializer extends JsonSerializer {
    14. @Override
    15. public void serialize(String value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
    16. if (null == value) {
    17. jsonGenerator.writeString("");
    18. }else {
    19. jsonGenerator.writeString(value);
    20. }
    21. }
    22. }

    2、直接在实体类的属性上,加JsonSerialize注解

    如:

    1. package com.shuizhu.domain.Demo;
    2. import com.shuizhu.utils.JacksonNotNullAsHorizontalBarSerializer;
    3. import com.fasterxml.jackson.databind.annotation.JsonSerialize;
    4. import lombok.Data;
    5. import java.io.Serializable;
    6. import java.math.BigDecimal;
    7. /**
    8. * @author 睡竹
    9. * @date 2022/9/13
    10. */
    11. @Data
    12. public class Demo implements Serializable {
    13. private static final long serialVersionUID = -1L;
    14. private String name;
    15. //nullsUsing 为自定义类,上面那个类
    16. @JsonSerialize(nullsUsing = JacksonNotNullAsHorizontalBarSerializer.class)
    17. private BigDecimal value1;
    18. @JsonSerialize(nullsUsing = JacksonNotNullAsHorizontalBarSerializer.class)
    19. private BigDecimal value2;
    20. }


    然而,错误出现了 !!!!!!!!!!!!!

    被注解标注的字段,在返回给前端后,出现了两次!!!!

    如下:

    {

        "retCode": "0000",

        "retMsg": "",

        "data": {

            "rows": [

                 "name":"张三",

                 "value1":500.00,

                 "value2":1000.20,

                 "value1":500.00,

                 "value2":1000.20,

            ]

        }

    }

    原因及解决方法:

     原因:JsonSerialize注解与lombok的Data注解存在冲突!!!从而导致被JsonSerialize标注的字段重复返回

    解决:把data注解去掉,手动写getter、setter、toString方法即可

  • 相关阅读:
    静电学历史
    Transformer原理详解
    maven环境配置
    P2572 [SCOI2010] 序列操作【线段树】
    入门电机系列之2驱动器
    【打工日常】云原生之搭建个人文件分享的轻量小工具
    TCP协议剩余机制,Ip协议
    全面解析:诺华Novartis医药公司社招SHL入职测评笔试题型及攻略指南
    面试题 02.03. 删除中间节点
    作战仿真试验理论体系研究
  • 原文地址:https://blog.csdn.net/weixin_42675423/article/details/126829709