首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JSON库Jackson优雅序列化Java枚举

前言 在Java开发中我们为了避免过多的魔法值,使用枚举来封装一些静态的状态代码。...但是在将这些枚举的意思正确而全面的返回给前端却并不是那么顺利,我们通常会使用Jackson序列化对象为JSON,今天就来讲一个关于使用Jackson序列化枚举的通用性技巧。 2....序列化枚举 如果我们直接使用Jackson对枚举进行序列化,将只能简单的输出枚举的String名称: @Resource private ObjectMapper objectMapper...JsonProcessingException e) { e.printStackTrace(); } } 我们期望将GenderEnum.MALE 序列化为...总结 这里我们介绍了如何定制Jackson库以达到对枚举进行更加友好的序列化的目的。其实不单单枚举,你也可以实现其它序列化,反序列化,时间输出格式的定制。这些特性留给你自己挖掘。

5.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaJava序列化和反序列化

    java.io.Serializable接口 Serializable是一个标记接口(没有数据成员和方法)。它用于“标记”Java,以便这些的对象可以获得某种能力。...# Java序列化的例子 在此示例中,我们将从上面代码的Student序列化对象。 ObjectOutputStream的writeObject()方法提供了序列化对象的功能。...# Java聚合(HAS-A关系)序列化 如果一个引用另一个,则所有引用必须是Serializable,否则将不执行序列化过程。...注意:对象中的所有对象都必须是可序列化的。 # Java序列化中的静态数据成员 如果一个中有任何静态数据成员,它将不被序列化,因为静态是的一部分而不是对象。...例如: private static final long serialVersionUID=1L; 现在,可序列化将如下所示: Employee.java import java.io.Serializable

    12510

    Java IO之对象的序列化、ObjectInputStream和ObjectOutputStream

    参考链接: Java ObjectInputStream 什么是IO流?  byte序列的读写,Java中的IO流是实现输入/输出的基础.   ...我们可以使用java.io.ObjectInputStream和java.io.ObjectOutputStream来完成这个任务。    1、什么是对象的序列化(Serialize)?...为了演示如何进行对象的序列化,我们先设计一个User:    package cls;  import java.io.*;  public...被Serialization接口声明的其对象可以被序列化,如果现在用户希望可以自己制定序列化的内容,则可以让一个实现Externalizable接口,此接口定义如下:   public interface...,因为此接口在进行反序列化的时候,会先使用   中的无参构造方法为其进行实例化,之后再将内容分别设置到属性之中,因此,修改Person:     [java]     view plain

    1.1K30

    java序列化

    # 背景 java对象是在jvm中,如果jvm销毁,那么对象都不存在了。...如果想继续使用java对象的话,需要用到序列化,将java中的对象转化为字节序列,用于存储和运输; 那么可以将DB理解为一种序列化,将java对象序列化后存储在DB中,将java对象保存在文本中也是一种序列化...# 细节 需要被序列化,需要实现Serializable接口 虽然Serializable接口是空的,没有任何方法,但也要实现,起到标识的作用 同一字节流中的引用是得到保存的 User user...= o2.user 反序列化没有调用构造函数 public class User implements Serializable { private String name; private...name, int id) { System.out.println("构造函数调用"); this.name = name; } } 这里的构造方法不会被调用 序列化

    56110

    Java 序列化

    引言 我们经常在 java 中使用序列化序列化成一个二进制文件,需要的时候再反序列化,但是一直只知道只要实现 Serializable 接口就可以了,一直不知道具体的原理,我们今天就来一探究竟。...注意方法的改变不影响,因为序列化序列化属性,跟方法无关 如果你不在中声明SerialVersionUID的话,Java会在运行时替你生成一个,不过这个生成的过程会受到元数据包括字段数,字段类型,...字段的访问限制符,实现的接口等因素的影响. ---- 静态变量的问题 看代码 import java.io.*; public class Demo implements Serializable...一个子类序列化,但是父没有序列化。...那么在反序列化后,并没有父类属性,其实不难理解。要想将父对象也序列化,就需要让父也实现Serializable 接口。或者是显示的调用父的构造方法。

    72420

    Java序列化

    什么是序列化,如何实现序列化 概述 Java序列化是指将Java对象转换为二进制字节流,以便于持久化和传输的过程。...反之,则称为反序列化 默认的序列化实现由JVM负责,可序列化的对象需要实现Serializable接口 Serializable接口不包含任何方法,只用于标记该对象可序列化;若未实现该接口,则序列化时会报...常数 该常数用于指定对象的版本,反序列化时会检查版本是否改变,若改变则会报错 建议显示赋值该常量,否则jvm会根据对象属性、方法等自动生成,若序列化前后对象有变化,则版本号会重新生成,反序列化时就会抛异常...://cloud.tencent.com/developer/article/1130025 https://www.baeldung.com/java-serialization https://www.baeldung.com.../java-externalizable

    11110

    Java 序列化

    Java序列化是指把Java对象转换为字节序列的过程 Java序列化是指把字节序列恢复为Java对象的过程 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等...只有实现了Serializable或者Externalizable接口的的对象才能被序列化为字节序列。...成员是引用的序列化 如果一个可序列化的成员不是基本类型,也不是String类型,那这个引用类型也必须是可序列化的;否则,会导致此类不能序列化。...:15) 程序直接报错,因为Teacher的对象是不可序列化的,这导致了Person对象不可序列化。...序列化版本号可自由指定,如果不指定,JVM会根据信息自己计算一个版本号,这样随着class的升级,就无法正确反序列化;不指定版本号另一个明显隐患是,不利于jvm间的移植,可能class文件没有更改,但不同

    1.2K00

    Java序列化与反序列化

    对象的序列化机制是什么? 对象序列化机制允许把内存中的Java对象转化成语平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。...当其他程序获取了这种二进制流,就可以恢复成原来的Java对象。 2....Java自定义序列化要求: 自定义需要实现接口:Serializable(标识接口:无任何属性或抽象方法),否则会报NotSerializableException 异常 要求自定义声明一个全局常量...要求自定义的各个属性也必须是可以序列化的: 对于基本数据类型:默认就可以序列化,因为底层已经实现了Serializable接口 若某个属性是引用数据类型:那么这个属性所在也要求实现Serializable...若某个属性不想被序列化,则该属性必须注明是瞬态的,使用transient关键字修饰。 静态(static)变量的值不会序列化。因为静态变量的值不属于某个对象 是属于的。

    63910

    Java序列化和反序列化

    java序列化指的是将java对象转化为字节序列的过程。 java序列化指字节序列恢复到java对象。 一、基础知识 计算机内存最小单位为一个二进制位,即 0或1。...序列化为二进制数据,可以永久存在硬盘里,也可以进行网络传输。 三、实现java序列化和反序列化 下面嫌太长了可以直接看例子。...JDK库中序列化和反序列化API java.io.ObjectOutputStream: 表示对象输出流; 它的writeObject(Object obj)方法可以对参数指定的obj对象进行序列化...实现Java对象序列化与反序列化的方法 若User仅仅实现了Serializable接口,则可以按照以下方式进行序列化和反序列化: ObjectOutputStream采用默认的序列化方式,对User...反序列化就不写了,反反过来推一遍就成。 五、java反射机制 反射机制允许程序在运行期借助于Reflection API取得任何的内部信息,并能直接操作任意和对象的所有属性及方法。

    12710

    JAVA序列化序列化与反序列化&Java反射&URLDNS链

    原生序列化与反序列化 序列化JAVA对象转换成字节序列的过程;将数据分解为字节流,以便存储在文件中或在网络上传输;用一个字节序列表示一个对象,该字节包含对象的数据、对象的类型、对象的存储属性。...序列化对象会通过ObjectOutputStream的writeObject方法将一个对象写入到文件中 反序列化:字节序列恢复成JAVA对象的过程;打开字节流并重构对象,反序列化是使用了readObject...当两个进程进行远程通讯时需要Java序列化与反序列化(可以相互发送各种数据,包括文本、图片、音频、视频等) 发送方需要把这个Java对象转换成字节序列(二进制序列的形式),然后在网络上传送,另一方面,接收方需要从字节序列中恢复出...Java反射 是指在运行时去获取一个的变量和方法信息。...图中注释部分与前面讲的JAVA反射技术就是为了动态修改url.Class中初始hashCode的值,使其不为-1,以避免在探测漏洞时产生误报) 反序列化原生代码 由于pom依赖问题,ysoserial

    16410

    Java 序列化与反序列化

    1、什么是序列化?为什么要序列化?     Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程。     ...我们都知道,在进行浏览器访问的时候,我们看到的文本、图片、音频、视频等都是通过二进制序列进行传输的,那么如果我们需要将Java对象进行传输的时候,是不是也应该先将对象进行序列化?...答案是肯定的,我们需要先将Java对象进行序列化,然后通过网络,IO进行传输,当到达目的地之后,再进行反序列化获取到我们想要的对象,最后完成通信。...2、serialVersionUid 序列化版本号的作用是用来区分我们所编写的的版本,用于判断反序列化的版本是否一直,如果不一致会出现版本不一致异常。       ...3、面试中关于序列化的问题: 1、什么是序列化,如何实现序列化 java中对象的序列化就是将对象转换成二进制序列,反序列化则是将二进制序列转换成对象 Java 实现序列化有多种方式 1、首先需要使用到工具

    1.3K80

    Java序列化和反序列化

    Java序列化和反序列化(What) Java序列化(Serialize)是指将一个Java对象写入IO流中; Java序列化(Deserialize)指的是从IO流中回复IO对象。 2....如何进行序列化(How) 为了使对象支持序列化机制,需要让它的变成可序列化的(serializable)。...//从输入流中读取一个Java对象并将其强制类型转换成Person Person p = (Person) ois.readObject(); 4.2 反序列化的代码 从前文创建的Object.txt...5.3 Java序列化算法 为了避免5.2中出现的错误,Java序列化算法如下: 所有保存在磁盘中的对象都有一个序列化编号 当程序试图序列化一个对象时,程序会先检查该对象是否已经被序列化过,只有改对象从未...6.3 transient关键字的使用 有带有transient关键字修饰的变量的Person public class Person implements java.io.Serializable

    87810

    java序列化和反序列化

    Java序列化和反序列化是将Java对象转换为字节流和将字节流转换为Java对象的过程。...在本文中,我们将探讨Java序列化和反序列化的基本原理以及如何使用Java进行序列化和反序列化Java序列化Java对象序列化是将Java对象转换为字节流的过程,使其可以在网络上传输或存储在磁盘上。...Java对象序列化可以通过ObjectOutputStream来实现。以下是一个简单的示例,演示如何将Java对象序列化并将其写入文件:import java.io....为了实现Java序列化,Student必须实现Serializable接口。在序列化过程中,我们创建了一个ObjectOutputStream,并将Student对象写入文件中。...Java序列化可以通过ObjectInputStream来实现。以下是一个简单的示例,演示如何从文件中读取序列化Java对象并进行反序列化:import java.io.

    91830

    Java 序列化问题

    因为新和旧序列化对象生成的serialVersionUID 不同,序列化的过程将依赖正确的序列化对象恢复状态的。否则会报错 java.io.InvalidClassException 。...Java 序列化的过程是依赖于正确的序列化对象恢复状态的,并在序列化对象序列版本不匹配的情况下引发 * java.io.InvalidClassException 无效异常。...Java 序列化的过程是依赖于正确的序列化对象恢复状态的,并在序列化对象序列版本不匹配的情况下引发 * java.io.InvalidClassException 无效异常。...Java 序列化的过程是依赖于正确的序列化对象恢复状态的,并在序列化对象序列版本不匹配的情况下引发 * java.io.InvalidClassException 无效异常。...(WriteObject.java:56) 静态变量的序列化 序列换保存的对象的状态,静态变量属于的状态,序列化并不保存静态变量。

    52630
    领券