![](https://img-blog.csdnimg.cn/2021041710111566.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Jackson
文章平均质量分 54
赵丙双
这个作者很懒,什么都没留下…
展开
-
SpringBoot 中怎么方便的使用 LocalDateTime
Spring 中主要有两种使用 LocalDateTime 的方式需要格式化,如下:LocalDateTime 作为 Controller 的参数LocalDateTime 是某实体类的字段,实体类作为 Controller 的参数LocalDateTime 作为 Controller 的返回值LocalDateTime 是某实体类的字段,实体类作为 Controller 的返回值@RestControllerpublic class TestController { @GetMap原创 2021-12-07 23:30:17 · 4018 阅读 · 6 评论 -
使用 JSON String 更新现有的对象
使用 JSON String 更新现有的对象ObjectMapper 的以下方法创建了 ObjectReader 实例,该实例可在反序列化传入 JSON 的同时更新现有对象。ObjectReader readerForUpdating(Object valueToUpdate)ObjectReader 有各种方法来读取输入 JSON 并返回更新后的对象。比如public <T> T readValue(String jsonInput) throws IOExceptionExam翻译 2021-05-31 10:27:15 · 534 阅读 · 0 评论 -
@JsonFilter 基于属性名过滤属性
@JsonFilter 可以按照属性名过滤要序列化的属性,它指定一个过滤器的 ID,真正的过滤器通过 ObjectMapper 注册,过滤器需要实现接口 com.fasterxml.jackson.databind.ser.PropertyFilter。通常直接使用 SimpleBeanPropertyFilter、SimpleBeanPropertyFilter。SimpleFilterProvider filterProvider = new SimpleFilterProvider();filte翻译 2021-05-31 10:21:17 · 2558 阅读 · 0 评论 -
@JsonIdentityReference 始终将对象序列化为 ID
@JsonIdentityReference 必须与 @JsonIdentityInfo 一起使用,@JsonIdentityInfo 在第二次遇到时才序列化为 Object Id,@JsonIdentityReference 可以强制使用 Object Id,而不是将第一个实例序列化为完整的 POJO。@JsonIdentityReference annotation:public @interface JsonIdentityReference{ // 返回 true 时始终使用 Obje翻译 2021-05-31 10:18:19 · 693 阅读 · 0 评论 -
@JsonManagedReference、@JsonBackReference 处理循环引用
@JsonManagedReference、@JsonBackReference 也能处理循环引用,它们是成对使用的:@JsonManagedReference :被其注解的属性可正常序列化。@JsonBackReference:被其注解的属性序列化时会被忽略掉,且只能用于普通 bean,不能是集合、Map、数组、枚举。与 @JsonIdentityInfo 的不同之处:@JsonIdentityInfo 会序列化对象标识符@JsonManagedReference、@JsonBac翻译 2021-05-31 10:15:46 · 988 阅读 · 0 评论 -
@JsonIdentityInfo 处理循环引用
@JsonIdentityInfo 用于处理对象的循环引用,方法是只在第一次遇到时序列化为完整的对象,之后再遇到同一个对象,都以对象的标识符代替。生成对象标识符有两种主要方法:使用生成器(标准生成器或自定义生成器之一),或者使用属性的值。后一种情况是通过使用占位符生成器标记ObjectIdGenerators.PropertyGenerator来指示的;前者使用显式生成器。对象id必须序列化为pojo的属性;对象标识目前不支持JSON数组类型(Java数组或列表)或Java Map类型。@JsonIde翻译 2021-05-25 15:15:53 · 2373 阅读 · 0 评论 -
@JsonRootName 指定 JSON 根属性的名称
@JsonRootName 指定 JSON 根属性的名称@JsonRootName 仅用于指定 JSON 根属性的名称,并不能启用这种包装功能。只有当SerializationFeature.WRAP_ROOT_VALUE、DeserializationFeature.UNWRAP_ROOT_VALUE 启用时才有效。若只开启了 Feature 功能但未使用 @JsonRootName 注解,默认会使用类名作为 RootName。ExamplePOJO@JsonRootName("Person")翻译 2021-05-25 15:13:07 · 1561 阅读 · 0 评论 -
@JsonValue 只序列化单个字段或单个方法返回值(不是整个对象)
@JsonValue 只序列化单个字段或单个方法返回值(不是整个对象)@JsonValue 只序列化单个字段或单个方法(无参、返回非void)的返回值,而不是收集对象的所有属性。value 通常是简单标量类型(String或Number),但它可以是任何可序列化的类型(比如 Collection、Map或Bean)。 一个类中最多只能有一个 @JsonValue 注解。一个典型的用法是注解 toString() 方法,使返回的 String 值用作 JSON 序列化;如果需要反序列化,则使用 @Json翻译 2021-05-25 15:09:38 · 1052 阅读 · 0 评论 -
@JsonRawValue 按原样序列化属性
@JsonRawValue 注解能够按原样序列化属性。属性值不会被转义或者加引号(或者说,会自动去掉转义,多余的引号)。属性值已经是一个 JSON String,或者属性值已经被加了引号时很有用。ExamplePOJOpublic class Report { private long id; private String name; @JsonRawValue private String content; ...} 序列化public clas翻译 2021-05-25 15:07:43 · 4231 阅读 · 0 评论 -
@JsonEnumDefaultValue 标记枚举的默认值
@JsonEnumDefaultValue 用于定义在尝试反序列化未知枚举值使用的默认值。只能应用于字段上,且只有在 READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE 反序列化功能启用其才有效。ExampleExample Enumpublic enum EmployeeType { FullTime, PartTime, @JsonEnumDefaultValue Contractor;}反序列化有效的枚举值publi翻译 2021-05-17 19:56:34 · 2817 阅读 · 0 评论 -
@JsonAnySetter 反序列化未知(Unrecognized)属性
有时候,反序列化时会遇到未知的(Unrecognized)属性,默认行为是抛出异常,我们可以使用 @JsonIgnoreProperties(ignoreUnknown = true) 忽略未知的属性,但有时我们需要保留这些属性,这时就需要用到 @JsonAnySetter。对于输入 JSON 中所有未映射的属性,它充当后备处理程序。可用于字段和方法:字段:必须是 java.util.Map 或 POJO 类型方法:非静态的、2 个参数的(第一个参数是属性名,第二个是属性值),所有 Unrecogni翻译 2021-05-17 19:55:14 · 367 阅读 · 0 评论 -
@JsonAnyGetter 将 Map 序列化为扁平的属性
被 @JsonAnyGetter 注解的方法必须是非静态的、无参数的,且返回值必须为 java.util.Map。序列化时,Map 的条目会被扁平化(与对象其他的属性位于同一级别,与 @JsonUnwrapped 的处理方式相同),而不是作为嵌套属性被序列化。ExamplePOJOpublic class ScreenInfo { private String id; private String title; private int width; private in翻译 2021-05-17 19:53:12 · 792 阅读 · 0 评论 -
@JsonUnwrapped 以扁平的数据结构序列化/反序列化属性
@JsonUnwrapped 表明属性应该以扁平化的形式进行序列化,即,目标属性将不会序列化为 JSON 对象,但其属性将序列化为包含它的对象的属性。并能以相同的方式反序列化。让我们通过一个例子来理解它。ExampleJava Objectspublic class Department { private String deptName; private String location; ...} public class Employee { priva翻译 2021-05-17 19:52:00 · 3127 阅读 · 2 评论 -
@JsonFormat 将 Collection、Number 序列化为 JSON 对象
@JsonFormat 还可以用于将 java.util.Collection 和 java.lang.Number 的子类分别序列化为pojo而不是集合元素和数字标量值。只有在类级别使用 @JsonFormat#shape=JsonFormat.Shape.OBJECT 时才会起作用。可同时作用于序列化和反序列化。ExampleJava Objects@JsonFormat(shape = JsonFormat.Shape.OBJECT)public class ArrayListEx<T&翻译 2021-05-07 09:30:41 · 692 阅读 · 0 评论 -
@JsonFormat 将枚举序列化为对象
枚举可以通过名称或序号进行序列化。还可以使用 JsonFormat.Shape.OBJECT 将枚举序列化为JSON对象(就像它们是pojo一样)。只有将 @JsonFormat 用于类级别时才有效。且不能反序列化,会抛异常。ExampleJava Enum@JsonFormat(shape = JsonFormat.Shape.OBJECT)public enum EmployeeType { FullTime("Full Time"), PartTime("Part Time");翻译 2021-05-07 09:29:12 · 4132 阅读 · 0 评论 -
@JsonFormat 格式化时间、枚举
@JsonFormat 是通用注释,可用于将特定类型序列化为特定格式。用于配置如何序列化属性值的详细信息的通用注释。与大多数其他Jackson注释不同,annotation没有特定的通用解释:相反,效果取决于被注释属性的数据类型(或者更具体地说,使用了反序列化和序列化)。常见的用途包括在替代表示之间进行选择——例如,Java .util. date是要序列化为数字(Java时间戳)还是字符串(例如ISO-8601兼容的时间值)——以及使用模式属性配置精确的细节。package com.fasterxm翻译 2021-05-07 09:20:33 · 5321 阅读 · 0 评论 -
@JsonView 将属性分组
@JsonView 可以将对象的属性分成不同的组,这些组称之为 view。view 是开发人员定义的空类/接口。可以根据不同的用途使用不同的 view。可用于序列化和反序列化。@JsonView 可用于属性上,也可用于类级别上。当用于类级别时,即指定了默认 View,可以用属性级别的注解覆盖类级别的默认 View。Quick Example:public interface ContactInfoView {}public class Employee{ private String na翻译 2021-05-07 09:08:53 · 474 阅读 · 0 评论 -
@JsonInclude.Include.CUSTOM 自定义属性值过滤规则
使用 @JsonInclude#value = JsonInclude.Include.CUSTOM 并通过 @ JsonInclude#valueFilter 指定一个过滤器类,则该属性值只有在没有被过滤器类过滤的情况下才会被序列化。过滤器类的 equals() 方法用于过滤值;如果返回true,则值不会序列化。同样,使用 @JsonInclude#value = JsonInclude.Include.CUSTOM 并通过 @JsonInclude#contentFilter 指定过滤器类,则如果过翻译 2021-05-06 19:29:02 · 2408 阅读 · 0 评论 -
@JsonInclude 基于属性值的包含规则
@JsonInclude 可用于指示何时可以对被注解的属性值进行序列化。通常会序列化所有的属性值,但是通过使用此注解,我们可以基于属性值指定简单的排除规则。@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@JacksonAnnotation翻译 2021-05-06 19:27:14 · 719 阅读 · 0 评论 -
@JsonAutoDetect 定义字段、方法的访问可见性规则
默认情况下,Jackson 只使用 public 的字段进行序列化和反序列化。没有 public 字段时,会使用 public 的 getters/setters。可以通过 @JsonAutoDetect 自定义这种行为,指定字段、方法的可见性规则。@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@JacksonAnnotationpublic @interface翻译 2021-05-05 13:24:54 · 3027 阅读 · 1 评论 -
@JsonTypeId 覆盖多态信息
@JsonTypeId 可用于在序列化期间覆盖多态的类型信息。它通常用于覆盖 @JsonTypeInfo 指定的类型信息。ExamplePOJOs@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)@JsonSubTypes(@JsonSubTypes.Type(value = Rectangle.class, name = "rectangle"))public abstract c翻译 2021-05-05 13:23:20 · 578 阅读 · 0 评论 -
@JsonTypeInfo 逻辑名称 @JsonSubTypes、@JsonTypeName
@JsonTypeInfo 逻辑名称 @JsonSubTypes、@JsonTypeName@JsonTypeName@JsonSubTypeExampleJava ObjectsSerializing and deserializinginclude = JsonTypeInfo.As.WRAPPER_OBJECT原文链接@JsonTypeInfo 的 use = JsonTypeInfo.Id.CLASS,会将完全限定类名序列化为类型标识符。当非 Java 客户端使用被序列化的 JSON 时,Java翻译 2021-05-05 13:14:43 · 7585 阅读 · 0 评论 -
@JsonTypeInfo 最小相对包路径 use = JsonTypeInfo.Id.MINIMAL_CLASS
use = JsonTypeInfo.Id.MINIMAL_CLASS选项将序列化最小的相对包路径。例如,对于超类型 com.logicbig.example.Shape 和具体类型com.logicbig.example.shapes.Circle,将只包括 .shapes.Circle。对于 com.logicbig.example.shapes.impl.Rectangle,仅包含 .shapes.impl.Rectangle,对于 com.logicbig.example.Square,仅包含 .S翻译 2021-05-05 12:30:03 · 575 阅读 · 0 评论 -
@JsonTypeInfo 处理多态、序列化对象类型
@JsonTypeInfo 处理多态使用 @JsonTypeInfo@JsonTypeInfo 用于字段上include = WRAPPER_OBJECT、WRAPPER_ARRAYJsonTypeInfo.As.WRAPPER_OBJECTJsonTypeInfo.As.WRAPPER_ARRAY使用 ObjectMapper.activateDefaultTyping()原文链接在 JSON 中存在多态类型的情况下,Jackson 无法在反序列化期间找出正确的类型。让我们通过一个例子来理解它。pub翻译 2021-05-05 12:23:09 · 5074 阅读 · 0 评论 -
@JsonSerialize#as 序列化为超类
@JsonSerialize#as 序列化为超类ExampleJava ObjectsMain class不使用 `@JsonSerialize#as`原文链接可使用 @JsonSerialize#as 指定序列化的类型为超类型。优先级 using > as。假如 A extends B: @Serialize(as = B.class) A a;序列化时会跳过 A 特有的字段,只序列化 B 拥有的字段。ExampleJava Objectspublic class Rectang翻译 2021-04-30 17:59:00 · 523 阅读 · 1 评论 -
@JsonDeserialize#as 反序列化为子类
@JsonDeserialize#as 反序列化为子类ExampleJava ObjectMain class不使用 @JsonDeserialize#as原文链接可使用 @JsonDeserialize#as 指定反序列化的类型为子类型。优先级 using > as。ExampleJava Objectpublic class CurrencyRate { private String pair; @JsonDeserialize(as = BigDecimal.class翻译 2021-04-30 17:57:59 · 867 阅读 · 1 评论 -
@JsonSerialize、@JsonDeserialize 与 自定义 JsonSerializer、JsonDeserializer
@JsonSerialize、@JsonDeserialize 与 自定义 JsonSerializer、JsonDeserializerExampleJava objectSerializerDeserializerMain class使用 ObjectMapper 注册 Serializer、Deserializer原文链接接上一篇 com.fasterxml.jackson.databind.JsonSerializer、com.fasterxml.jackson.databind.JsonDese翻译 2021-04-30 17:55:50 · 4810 阅读 · 1 评论 -
@JsonSerialize、@JsonDeserialize 与 自定义Converter
@JsonSerialize、@JsonDeserialize 与 自定义ConverterExampleJava ObjectCustom ConvertersMain class原文链接Converter 接口可以将一种类型转换为另一种类型。我们可以自定义类型 Converter,然后用 @JsonSerialize#converter、@JsonDeserialize#converter 指定它们,用于序列化和反序列化。Converter 的类型为com.fasterxml.jackson.data翻译 2021-04-30 17:53:26 · 1770 阅读 · 1 评论 -
@ConstructorProperties 指定构造方法
@ConstructorProperties 不是 Jackson 的注解,它位于 java.beans 包中。它的用法类似 @JsonCreator 与 @JsonProperty 的组合,也是用于指定反序列化时的构造方法。public class Employee { private String name; private String dept; @ConstructorProperties({"name", "dept"}) public Employee(St翻译 2021-04-30 17:51:58 · 997 阅读 · 1 评论 -
@JsonCreator 指定构造方法、工厂方法
@JsonCreator 指定构造方法、工厂方法构造方法工厂方法原文链接@JsonCreator 能够指定反序列化时的构造方法或工厂方法,需要配合 @JsonProperty 使用。这通常用于 JSON 与对象的字段不完全匹配时、不可变对象。有以下规则:当有多个参数时,必须用 @JsonProperty 注解每个参数。只有一个参数时,可以省略 @JsonProperty 。构造方法public class JsonCreatorConstructorExample { public翻译 2021-04-27 11:36:53 · 2317 阅读 · 0 评论 -
@JsonAlias 指定反序列化时的别名
@JsonAlias 指定反序列化时的别名原文链接@JsonAlias 可指定属性的一个或多个别名,只用于反序列化。别名和重命名不同,别名是添加其他的名称,而重命名是修改名称。public class Employee { private String name; @JsonAlias({"department", "employeeDept" }) private String dept; ...} public class ExampleMain {翻译 2021-04-25 20:52:15 · 3866 阅读 · 0 评论 -
@JsonPropertyOrder 定义序列化时属性的顺序
@JsonPropertyOrder 定义序列化时属性的顺序用于类级别不使用 @JsonPropertyOrder 的输出按字母顺序用于字段级别原文链接@JsonPropertyOrder 可用于定义序列化时属性的顺序,注解中包含的属性会首先被序列化(按照定义的顺序),然后是未被包含的属性。用于类级别@JsonPropertyOrder({"name", "phoneNumber","email", "salary", "id" })public class Employee { priva翻译 2021-04-25 20:49:42 · 4007 阅读 · 0 评论 -
@JacksonInject 指定反序列化时的默认值
@JacksonInject 指定反序列化时的默认值通过 key 注入通过类型注入原文链接在反序列化期间,被注解属性的值会被注入,而不是从 JSON 中反序列化。如果源 JSON 中没有我们需要的信息时,这时将很有用,我们可以用它设置默认值。通过 key 注入public class CurrencyRate { private String pair; private double rate; @JacksonInject("lastUpdated") private翻译 2021-04-22 19:45:32 · 2665 阅读 · 0 评论 -
@JsonIgnoreType 忽略某个类型
@JsonIgnoreType 忽略某个类型使用 @JsonIgnoreType直接序列化、反序列化 Address原文链接@JsonIgnoreType 只能用于类级别。当一个被 @JsonIgnoreType 注解的类作为其他类的属性时,在序列化和反序列化期间将忽略该属性。即只有在该类作为其他类的属性时才会被忽略,直接序列化、反序列化该类是正常的。使用 @JsonIgnoreType@JsonIgnoreTypepublic class Address { private String翻译 2021-04-21 19:59:41 · 1044 阅读 · 0 评论 -
@JsonIgnoreProperties 忽略未知属性
@JsonIgnoreProperties#ignoreUnknown 可用于忽略 POJO 中不存在的属性:@JsonIgnoreProperties(ignoreUnknown = true)public class Employee3 { private String name; private String dept; private String address; ...} public class ExampleMain3 { public翻译 2021-04-20 20:55:56 · 1844 阅读 · 0 评论 -
忽略属性 @JsonIgnore、@JsonIgnoreProperties
忽略属性 @JsonIgnore、@JsonIgnoreProperties@JsonIgnore@JsonIgnoreProperties原文链接@JsonIgnore@JsonIgnore 可用于字段、getters 、setters 上,只要存在 @JsonIgnore 就会完全忽略该属性,序列化和反序列化都会忽略。public class Employee { private String name; private String dept; @JsonIgnore翻译 2021-04-19 22:15:32 · 1920 阅读 · 0 评论 -
使用 @JsonSetter 处理 Null
除了重命名之外,@JsonSetter 还可以指定如何处理 JSON 中的 ‘null’。public class ExampleMain3 { public static void main(String[] args) throws IOException { String jsonString = "{\"name\":null}"; System.out.println(jsonString); //convert to Person翻译 2021-04-19 09:33:08 · 1703 阅读 · 0 评论 -
重命名之 @JsonProperty、@JsonSetter、@JsonGetter
重命名之 @JsonProperty、@JsonSetter、@JsonGetter@JsonProperty@JsonGetter and @JsonSetter原文链接@JsonProperty可以用 @JsonProperty 来指定属性在 JSON 中的名称,可用于字段、getters 、setters。public class ExampleMain { public static void main(String[] args) throws IOException {翻译 2021-04-17 09:35:50 · 984 阅读 · 0 评论 -
Jackson常用配置示例
Jackson常用配置示例对输出缩进Fail on Unknown Properties允许序列化空对象将空字符串反序列化为 null POJO空字符串与 Java simple objects序列化时的时间格式化原文链接Jackson 提供了 SerializationFeature、DeserializationFeature 来自定义 ObjectMapper 的行为。对输出缩进public class MyObject { private int intVal; private Str翻译 2021-04-17 09:30:13 · 4817 阅读 · 0 评论 -
Jackson 快速入门示例
Jackson 快速入门示例Maven dependencypom.xml简单的Java对象转换POJO 转换带泛型的转换读写文件通过 URL 读取原文链接以下是使用 Jackson 进行 JSON 处理的快速入门示例。这些示例显示了 Jackson 的 ObjectMapper 类的基本数据绑定功能。Maven dependencypom.xml<dependency> <groupId>com.fasterxml.jackson.core</groupId&翻译 2021-04-17 09:26:12 · 477 阅读 · 0 评论