@JsonSerialize不起作用的解决方案

 更新时间:2021年10月13日 14:49:30   作者:不吃肉的小和尚  
这篇文章主要介绍了@JsonSerialize不起作用的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

@JsonSerialize不起作用

在项目中 当字段实体类为Long类型时

如果Long值超过前端js显示的长度范围时会导致前端回显错误

此时我们想到的解决方案是将Long值返回给前端时转为String,

但是我们又不想变更字段的类型,当然我们也不想额外添加新的字段。

这个时候我们可以用@JsonSerialize,在Json序列化的时候把Long自动转为String,

但是这里有个小坑

被转换的字段必须是包装类类型,否则会转换失败。

@JsonSerialize(using = ToStringSerializer.class)
private Long parentId;    //转化成功
@JsonSerialize(using = ToStringSerializer.class)
private long parentId;    //转化失败

@JsonSerialize正确使用

实际开发中,我们一定遇到过这样的问题:前端显示和后台存储数据单位不统一,而且各有各自的理由,统一不了,那就只能由后端转换。

每次返回给前端时再转换一遍,返回给前端的json数据,在后端里定义的往往是一个对象,如何做到优雅的转换呢?只需两步操作:

1. 写一个负责转换的类

里面写好规则

 public class MySerializerUtils extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer status, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
        String statusStr = "";
         switch (status) {
             case 0:
                 statusStr = "新建状态";
                 break;
             case 1:
                statusStr = "就绪状态";
                 break;
             case 2:
                 statusStr = "运行状态";
                 break;
             case 3:
                 statusStr = "阻塞和唤醒线程";
                 break;
             case 4:
                statusStr = " 死亡状态";
               break;
             default:
                 statusStr = "状态信息不符合";
         }
         jsonGenerator.writeString(statusStr);
     }
 }

2. 在实体类上需要装换的字段上加上注解

/**
 * 多线程生命周期状态值
 */
@JsonSerialize(using = MySerializerUtils.class)
private int status;

注:@JsonSerialize注解,主要应用于数据转换,该注解作用在该属性的getter()方法上。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 初探Spring Cloud Gateway实战

    初探Spring Cloud Gateway实战

    这篇文章主要介绍了创建网关项目(Spring Cloud Gateway)过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • Java中List对象集合按对象中某字段进行排序举例

    Java中List对象集合按对象中某字段进行排序举例

    这篇文章主要给大家介绍了关于Java中List对象集合按对象中某字段进行排序的相关资料,我们在日常开发中也经常会用到排序算法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Java实现前缀树详解

    Java实现前缀树详解

    Java实现前缀树(Trie树)是一种树形数据结构,用于字符串的存储和查找,适用于大量字符串的快速匹配。通过将字符串拆分为字符序列,依次构建树形结构,将每个字符串的字符依次存储在树的节点上,实现高效的字符串匹配
    2023-04-04
  • Java中的日期时间类实例详解(Date、Calendar、DateFormat)

    Java中的日期时间类实例详解(Date、Calendar、DateFormat)

    在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理,这篇文章主要介绍了Java中的日期时间类详解(Date、Calendar、DateFormat),需要的朋友可以参考下
    2023-11-11
  • springcloud使用consul作为配置中心

    springcloud使用consul作为配置中心

    这篇文章主要介绍了springcloud使用consul作为配置中心,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • java中@EnableAutoConfiguration注解使用

    java中@EnableAutoConfiguration注解使用

    在Spring Boot框架中,@EnableAutoConfiguration是一种非常重要的注解,本文就来介绍一下java中@EnableAutoConfiguration注解使用,感兴趣的可以了解一下
    2023-11-11
  • java导出生成csv文件的方法

    java导出生成csv文件的方法

    这篇文章主要为大家详细介绍了java导出生成csv文件的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Java创建对象的四种方式详解

    Java创建对象的四种方式详解

    这篇文章主要介绍了Java创建对象的四种方式详解,如果我们不想利用默认构造器来创建java对象,而想利用指定的构造器来创建java对象,则需要利用Construtor对象,每个Construtor对应一个构造器,需要的朋友可以参考下
    2023-11-11
  • SpringBoot超详细分析启动流程

    SpringBoot超详细分析启动流程

    今天小编就为大家分享一篇关于SpringBoot整个启动过程的分析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2022-07-07
  • BaseMapper接口的使用方法

    BaseMapper接口的使用方法

    这篇文章主要介绍了BaseMapper接口的使用方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12

最新评论