您的位置:首页 > 娱乐 > 八卦 > 龙口seo_南通企业建站系统模板_自己开网店怎么运营_广告推广免费平台

龙口seo_南通企业建站系统模板_自己开网店怎么运营_广告推广免费平台

2025/2/25 7:46:28 来源:https://blog.csdn.net/2301_76419561/article/details/142961531  浏览:    关键词:龙口seo_南通企业建站系统模板_自己开网店怎么运营_广告推广免费平台
龙口seo_南通企业建站系统模板_自己开网店怎么运营_广告推广免费平台

Jackson是Java应用程序中最常用的JSON处理库之一,它能将Java对象转换为JSON格式,也能将JSON反序列化为Java对象。在Spring Boot中,Jackson的使用非常广泛,并且Spring Boot默认配置已经包含了Jackson。本文将详细介绍Jackson在Spring Boot中的多种开发技巧。

1. 依赖引入

在Spring Boot项目中,Jackson通常作为spring-boot-starter-web的一部分被自动引入。因此,当项目中引入spring-boot-starter-web后,就不需要单独引入Jackson。不过,如果需要单独引入,可以添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-json</artifactId>
</dependency>
2. 注解使用

Jackson提供了多种注解,用于控制Java对象与JSON对象之间的转换过程。以下是常用的注解及其使用示例:

2.1 @JsonProperty

@JsonProperty注解用于指定JSON串中的属性名。如果Java对象中的属性名与JSON中的属性名不同,可以使用@JsonProperty注解进行指定。

public class User {@JsonProperty("username")private String name;private Integer age;// 省略getter和setter
}

上面的代码表示,在将User对象转换为JSON格式时,name字段将被序列化成JSON串中的username属性。

2.2 @JsonIgnore

@JsonIgnore注解用于忽略某个字段,该字段不会被序列化到JSON中。

public class User {private String name;@JsonIgnoreprivate String password;// 省略getter和setter
}

上面的代码表示,在将User对象转换为JSON格式时,password字段将不会出现在JSON中。

2.3 @JsonInclude

@JsonInclude注解用于指定JSON序列化时包含哪些字段,以及如何处理空值。

@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {private String name;private Integer age;private String phone;// 省略getter和setter
}

上面的代码表示,在将User对象转换为JSON格式时,如果age字段的值为null,那么这个字段将不会出现在JSON中。而如果phone字段的值为null,这个字段将会出现在JSON中,但是它的值将为null。

2.4 @JsonFormat

@JsonFormat注解用于格式化日期类型字段。

public class User {private Long id;@JsonProperty("username")private String name;private Integer age;@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", locale="zh", timezone="GMT+8")private Date birthday;// 省略getter和setter
}

上面的代码表示,在将User对象转换为JSON格式时,birthday字段将按照指定的日期格式进行序列化。

2.5 @JsonTypeInfo 和 @JsonSubTypes

这两个注解用于处理多态类型的序列化与反序列化。

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXISTING_PROPERTY, visible=true, property="type")
@JsonSubTypes({@JsonSubTypes.Type(value=DncCheckBox.class, name="CHECKBOX"),@JsonSubTypes.Type(value=DncDate.class, name="DATE"),// 其他实现类
})
public abstract class DocNoComponent {public String type;// 其他属性和方法
}

上面的代码表示,在序列化时,会根据type字段的值来判断具体的实现类,并在反序列化时根据这个值来实例化对应的类。

3. 全局配置

除了使用注解进行字段级别的配置外,还可以通过Spring Boot的配置文件对Jackson进行全局配置。

3.1 日期格式化

可以在配置文件中指定日期类型的全局格式化规则:

spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8
3.2 Long型字段转字符串

为了避免JavaScript在处理Long型字段时可能出现的精度丢失问题,可以将Long型字段序列化为字符串:

spring:jackson:default-property-inclusion: non_nullserialization:write_bigdecimal_as_plain: true

或者在字段级别使用@JsonFormat注解:

public class MyClass {@JsonFormat(shape=JsonFormat.Shape.STRING)private Long lng;// 其他属性和方法
}
4. 自定义序列化与反序列化

如果Jackson提供的注解和全局配置无法满足需求,还可以通过自定义序列化器和反序列化器来实现更复杂的功能。

4.1 自定义序列化器
public class CustomDateSerializer extends JsonSerializer<Date> {@Overridepublic void serialize(Date date, JsonGenerator gen, SerializerProvider serializers) throws IOException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String formattedDate = sdf.format(date);gen.writeString(formattedDate);}
}

然后在Java类中使用@JsonSerialize注解来指定自定义序列化器:

public class User {private Long id;private String name;@JsonSerialize(using = CustomDateSerializer.class)private Date birthday;// 省略getter和setter
}
4.2 自定义反序列化器
public class CustomDateDeserializer extends JsonDeserializer<Date> {@Overridepublic Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {JsonNode node = p.getCodec().readTree(p);String date = node.asText();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {return sdf.parse(date);} catch (ParseException e) {throw new RuntimeException(e);}}
}

然后在Java类中使用@JsonDeserialize注解来指定自定义反序列化器:

public class User {private Long id;private String name;@JsonDeserialize(using = CustomDateDeserializer.class)private Date birthday;// 省略getter和setter
}

通过以上介绍,相信你已经对Jackson在Spring Boot中的使用有了更深入的了解。这些技巧将帮助你更好地处理JSON数据的序列化和反序列化,提高开发效率。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com