「java序列化注解」Java 序列化

博主:adminadmin 2022-11-22 07:21:06 467

今天给各位分享java序列化注解的知识,其中也会对Java 序列化进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Jackson序列化&&FastJson序列化API使用

JDK英文文档,墙裂不推荐看中文!!!

ObjectMapper的API文档

1 需要注意的是:

2 Jackson的API: `

3. Jackson提供的注解

Jackson 提供了一系列的注解,方便对 JSON 序列化和反序列化进行控制,下面介绍一些常用的注解:

1. 引入MAVEN依赖:

2. 实体类

3. 测试类:

首先注意的是 JDK1.8 中时间类,采用了一套新的API。

在这里我们采用是 LocalDate 类,若是 User 类中,没有使用注解,那么序列化结果为:

显然,这不是我们预期的 Json 串。并且,我们在反序列化过程中,会出现异常:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of java.time.LocalDate (no Creators, like default construct, exist):

cannot deserialize from Object value (no delegate- or property-based Creator)

at [Source: (String)"{"name":"小胖","sports":["足球","游泳"],"date":{"year":2019,"month":"MARCH","chronology":{"id":"ISO","calendarType":"iso8601"},"dayOfMonth":27,"dayOfWeek":"WEDNESDAY","dayOfYear":86,"era":"CE","monthValue":3,"leapYear":false}}"; line: 1, column: 43] (through reference chain: com.JsonSerializer.User["date"])

大概意思:就是 LocalDate 的没有参数是 Object 的构造函数。不能实例化对象。

华丽的分割线 SpringBoot的处理

SpringBoot的解决方案:

Java bean的解决方案:

在 Java Bean 中使用注解,就可以进行反序列化和序列化。

执行结果:

FastJson 是性能极好的 JSON 解析器和生成器。

1. FastJson的优点:

2. FastJson的主要类:

1. FastJson的MAVEN依赖:

2. JSON准备:

ARR_JSON格式:

COMPLEX_JSON格式:

使用方式: github的使用文档

1. 通过 TypeReference 处理泛型对象

2. 使用 getType() 可以获取更好的性能。

1. TypeRefrence部分源码分析:

为什么这里的构造方法要是 protected 的,即我们无法直接创建该对象,只能使用匿名类创建 子类 对象。

getGenericSuperclass()的API方法

返回 Class 对象(类,接口,基本数据类型,void)的直接父类的 Type 类型。

如果父类是 parameterized [pə'ræmɪtəraɪzd] 类型(也可以理解为 父类是泛型对象 ),那么返回的参数类型是父类的泛型类型。

基本原理:

使用 public static T T parseObject(String text, ClassT clazz) 方法,边可完成JSON的反序列化。

1. 特殊JSON反序列化

2. 泛型丢失

我们可以看到,因为返回值需要泛型类型 T 所以我们采用的是 ClassT ,防止返回Object对象,让用户强转。但需要注意: 这种方式在反序列化的时候,会丢失泛型类型。

方式一:TypeReference

方式二:使用parseArray

我们可以通过这个 API ,完成 Bean 对象转换成 String 类型。

String toJSONString(Object object, SerializerFeature... features)

若是对象的属性只是简单数据类型(基本数据类型,或者String类型)那么可以使用Class方式转化为Object对象。

若是一个对象里面的属性依旧是一个对象,那么我们就可以使用TypeRefrence进行转换。

我们在将JSON转换为对象的时候,就可以保留ListT的泛型。即:

参考文章:

Java下利用Jackson进行JSON解析和序列化

使用FastJson处理JSON数据

fastjson如何json数组串转换为Object[]时如何指定各个数据项的数据类型

「java序列化注解」Java 序列化

java 文档注释是注释什么的,不是有多行注释了吗?

1、【文档注释】是写在类或者方法的上面的。

文档注释可以用eclipse导出chm格式的帮助文档,拿给其他人用时,方便他人理解。文档注释被调用的方法,当鼠标移到上面时提醒注释内容。

使用文档注释时,需要在开始的 /** 之后,第一行或几行是关于类、变量和方法的主要描述。

之后,可以包含一个或多个何种各样的@ 标签。每一个@标签必须在一个新行的开始或者在一行的开始紧跟星号(*)。多个相同类型的标签应该放成一组。

2、【多行注释】注释的也是方法或类,言下之意就是一次性的将程序中的多行代码注释掉,但多行注释的内容不能用于生成一个开发者文档。

3、【多行注释与文档注释的区别】多行注释的内容不能用于生成一个开发者文档,而文档注释 的内容可以生产一个开发者文档。

扩展资料

java常用的文档注释标签

1、@author:标识一个类的作者

实例: @author description

2、@deprecated:指名一个过期的类或成员

实例: @deprecated description

3、@exception:标志一个类抛出的异常

实例:@exception exception-name explanation

4、{@inheritDoc}:从直接父类继承的注释

实例:Inherits a comment from the immediate surperclass.

5、{@link}:插入一个到另一个主题的链接

实例:{@link name text}

6、{@linkplain}:插入一个到另一个主题的链接,但是该链接显示纯文本字体

实例:Inserts an in-line link to another topic.

7、@param:说明一个方法的参数

实例:@param parameter-name explanation

8、@return:说明返回值类型

实例:@return explanation

9、@see:指定一个到另一个主题的链接

实例:@see anchor

10、@serial:说明一个序列化属性

实例:@serial description

参考资料:百度百科-java注释

java中常用注解分别是什么及汉语意思!

Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注释是以‘@注释名’在代码中存在的,根据注释参数的个数,我们可以将注释分为:标记注释、单值注释、完整注释三类。它们都不会直接影响到程序的语义,只是作为注释(标识)存在,我们可以通过反射机制编程实现对这些元数据的访问。另外,你可以在编译时选择代码里的注释是否只存在于源代码级,或者它也能在class文件中出现。

元数据的作用

如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类:

编写文档:通过代码里标识的元数据生成文档。

代码分析:通过代码里标识的元数据对代码进行分析。

编译检查:通过代码里标识的元数据让编译器能实现基本的编译检查。

基本内置注解

@Override java中覆写

@Deprecated的作用是对不应该在使用的方法添加注释,当编程人员使用这些方法时,将会在编译时显示提示信息,它与javadoc里的

@deprecated标记有相同的功能,准确的说,它还不如javadoc

@deprecated,因为它不支持参数

@SuppressWarnings,其参数有:

deprecation,使用了过时的类或方法时的警告

unchecked,执行了未检查的转换时的警告

fallthrough,当 Switch 程序块直接通往下一种情况而没有 Break 时的警告

path,在类路径、源文件路径等中有不存在的路径时的警告

serial,当在可序列化的类上缺少 serialVersionUID 定义时的警告

finally ,任何 finally 子句不能正常完成时的警告

all,关于以上所有情况的警告

自定义注释

它类似于新创建一个接口类文件,但为了区分,我们需要将它声明为@interface,如:public @interface NewAnnotation {}............

Gson @SerializedName注解使用说明

1. @SerializedName

默认情况下,我们假设Java模型类和JSON将完全相同的字段名称。但有时情况并非如此,某些名称也有所不同。现在我们必须将someNamejsonsomeOtherName中的映射映射到Java类中。这是@SerializedName注释有用的地方。

@SerializedName 注释指示应将带注释的成员序列化为JSON,并将提供的名称值作为其字段名称。此批注将覆盖FieldNamingPolicy可能已使用GsonBuilder该类的任何内容,包括默认字段命名策略。

请注意,您在此批注中指定的值必须是有效的JSON字段名称。

1.1。注释属性

它接受两个属性:

value- 序列化或反序列化时字段的所需名称。

alternate- 反序列化时字段的替代名称。除了 'value' 属性之外,它还提供了更多可能的名称。如果有多个字段与一个属性匹配,Gson将使用最后处理的字段。

请记住,alternate具有多个名称的选项仅限于反序列化。在序列化中,它不会产生任何影响。

2.在序列化期间更改字段名称

让我们举一个Employee只有4个字段的类的例子。我们想创建JSON,其中"email"写为字段名称"emailId"。

让我们序列化一个员工记录并查看JSON输出。

执行输出:

复制 {"id":1001,"firstName":"Lokesh","lastName":"Gupta","emailId":"howtodoinjava@gmail.com"}

3.在反序列化期间更改字段名称

在将JSON反序列化到Java类期间映射不同字段名称的Java程序。

复制 {  "id":1001,  "firstName":"Lokesh",  "lastName":"Gupta",  "email":"howtodoinjava@gmail.com",  "emailAddress":"admin@gmail.com"}

复制 Main.javaString json ="{'id': 1001,"+"'firstName': 'Lokesh',"+"'lastName': 'Gupta',"+"'email': 'howtodoinjava@gmail.com',"+"'emailAddress': 'admin@gmail.com'}";        Gson gson =newGsonBuilder().setPrettyPrinting().create(); Employee emp = gson.fromJson(json, Employee.class); System.out.println(emp);

执行输出:

复制 Employee [id=1001, firstName=Lokesh, lastName=Gupta, email=admin@gmail.com]

注意程序输出。我们有两个匹配的 电子邮件 领域即email和emailAddress。最后一次出现是for "emailAddress",所以它的值被填充到Employee对象中。

关于java序列化注解和Java 序列化的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。