服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - @JsonSerialize不起作用的解决方案

@JsonSerialize不起作用的解决方案

2022-02-19 14:37不吃肉的小和尚 Java教程

这篇文章主要介绍了@JsonSerialize不起作用的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

@JsonSerialize不起作用

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

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

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

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

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

但是这里有个小坑

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

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

@JsonSerialize正确使用

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

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

1. 写一个负责转换的类

里面写好规则

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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. 在实体类上需要装换的字段上加上注解

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

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

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

原文链接:https://blog.csdn.net/m0_37980582/article/details/103702651

延伸 · 阅读

精彩推荐
  • Java教程linux下执行java程序的sh脚本分享

    linux下执行java程序的sh脚本分享

    这篇文章主要介绍了linux下执行java程序的sh脚本,仅供参考,但是设置的时候环境变量是最重要的,我就是环境变量一直不对,总是按网上查到的来,不明...

    hebedich1912019-11-29
  • Java教程Java编程几个循环实例代码分享

    Java编程几个循环实例代码分享

    这篇文章主要介绍了Java编程几个循环实例代码分享,多看多练,小编觉得还是挺不错的,这里分享给大家,供需要的朋友参考。...

    qq_33624284的博客10432021-01-27
  • Java教程Java核心编程之文件随机读写类RandomAccessFile详解

    Java核心编程之文件随机读写类RandomAccessFile详解

    这篇文章主要为大家详细介绍了Java核心编程之文件随机读写类RandomAccessFile,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    夏天de树下睡着了2792020-12-21
  • Java教程2个java希尔排序示例

    2个java希尔排序示例

    java希尔排序示例,希尔排序是插入排序的一种类型,也可以用一个形象的叫法缩小增量法,需要的朋友可以参考下 ...

    Java教程网3712019-11-22
  • Java教程MyBatis通过BATCH批量提交的方法

    MyBatis通过BATCH批量提交的方法

    今天小编就为大家分享一篇关于MyBatis通过BATCH批量提交的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编...

    isea53311652021-06-24
  • Java教程MiniDao1.8.3 版本发布,轻量级Java持久化框架

    MiniDao1.8.3 版本发布,轻量级Java持久化框架

    MiniDao 是一款轻量级JAVA持久层框架,基于 SpringJdbc + freemarker 实现,具备Mybatis一样的SQL分离和逻辑标签能力。...

    JEECG8142021-08-10
  • Java教程进程缓存和缓存服务,如何抉择?

    进程缓存和缓存服务,如何抉择?

    我们所说的缓存分为进程内部缓存(系统内部缓存)和 缓存服务(如redis/memcache)。计算机服务从原来的单体结构,到多实例,到现在流行的微服务,缓存...

    Java技术栈4232021-08-05
  • Java教程java实现简单扫雷小游戏

    java实现简单扫雷小游戏

    这篇文章主要为大家详细介绍了java实现简单扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    tf19977422021-05-12