Java使用ObjectMapper的簡單示例
一、什么是ObjectMapper?
- ObjectMapper類是Jackson庫的主要類,它提供一些功能將數(shù)據(jù)集或?qū)ο筠D(zhuǎn)換的實(shí)現(xiàn)。
- 它將使用JsonParser和JsonGenerator實(shí)例來實(shí)現(xiàn)JSON的實(shí)際讀/寫。
二、ObjectMapper怎么使用?
2.1 配置
2.1.1 普通Java項(xiàng)目(引入如下依賴即可)
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.5</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.5</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.5</version> </dependency>
2.1.2 Sring Boot項(xiàng)目
重要說明:
由于Spring Boot的自動配置JacksonAutoConfiguration中有如下圖所示的依賴引入和配置,所以不需要我們額外配置


2.2 實(shí)戰(zhàn)
User類
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class User implements Serializable {
private static final long serialVersionUID = 1L;
// 姓名
private String name;
// 性別
private String sex;
// 年齡
private Integer age;
}
2.2.1 Java對象、集合轉(zhuǎn)JSON
public static void main(String[] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
User user = new User();
user.setName("張三");
user.setAge(20);
user.setSex("男");
List<User> userList = new ArrayList<>();
userList.add(user);
// 對象轉(zhuǎn)換為JSON
String userJsonString = objectMapper.writeValueAsString(user);
// 集合轉(zhuǎn)換為JSON
String userListJsonString = objectMapper.writeValueAsString(userList); }
2.2.2 JSON轉(zhuǎn)Java對象、集合
// JOSN轉(zhuǎn)對象(java對象)
User newUser = objectMapper.readValue(userJsonString, User.class);
// JOSN轉(zhuǎn)集合(集合)
List<User> list = objectMapper.readValue(userListJsonString, new TypeReference<List<User>>(){});
2.2.3json轉(zhuǎn)JsonNode、ObjectNode
說明:
Jackson的JsonNode和ObjectNode兩個(gè)類,前者是不可變的,一般用于讀取。后者可變,一般用于創(chuàng)建Json對象圖。
// json轉(zhuǎn)JsonNode
JsonNode jsonNode = objectMapper.readTree(userJsonString);
String sex = jsonNode.get("sex").asText();
// JsonNode轉(zhuǎn)ObjectNode
ObjectNode objectNode = (ObjectNode)jsonNode;
// json轉(zhuǎn)JsonNode
JsonNode jsonNodeList = objectMapper.readTree(userListJsonString);
// JsonNode轉(zhuǎn)ObjectNode
ArrayNode arrayNode = (ArrayNode)jsonNodeList;
2.2.4 jsonNode轉(zhuǎn)對象、集合
// jsonNode轉(zhuǎn)為json字符串
String jsonNodeString = objectMapper.writeValueAsString(jsonNode);
String jsonNodeListString = objectMapper.writeValueAsString(jsonNodeList);
// json字符串轉(zhuǎn)對象、集合
User user1 = objectMapper.readValue(jsonNodeString, User.class);
List<User> list1 = objectMapper.readValue(jsonNodeListString, new TypeReference<List<User>>() {});
2.3 注意事項(xiàng)
2.3.1微服務(wù)中從其他服務(wù)獲取過來的對象,如果從Object強(qiáng)轉(zhuǎn)為自定義的類型會報(bào)錯(cuò),利用ObjectMapper轉(zhuǎn)換。
正確示例:
說明:Schedule類、OutpOrderBill類都是類似于User類的Java對象。
// 對象
Schedule schedule = objectMapper.convertValue(callNurseCenterService.getSchedule(registRecord.getScheCode()).getData(), Schedule.class);
// 泛型為對象的集合
List<OutpOrderBill> outpOrderBillList = objectMapper.convertValue(
callChargeCenterService.getOrderBillByOrderCode(orders.getOrgCode(),orders.getOrderCode()).getData(),
new TypeReference<List<OutpOrderBill>>() {});
2.3.2 上面轉(zhuǎn)換的過程中,如果返回的字段你不是都需要,需要忽略其中的幾個(gè)字段,在自定義的類中添加標(biāo)紅注解
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@JsonIgnoreProperties(ignoreUnknown = true)
public class User implements Serializable {
private static final long serialVersionUID = 1L;
////提供有這個(gè)參數(shù),但是不想獲取
// // 姓名
// private String name;
// 性別
private String sex;
// 年齡
private Integer age;
}
如果不想添加注解,可以使用下面兩種方式
第一種方式:
ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD,Visibility.ANY); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
第二種方式:
ObjectMapper objectMapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
2.3.3 在轉(zhuǎn)換的過程中,有可能有的屬性被設(shè)成空就不序列化等的需求,可以在類的屬性上或直接在類上加上一下注解。用在屬性上就是只針對一個(gè)屬性,用在類上就是針對類里的所有屬性。
@JsonInclude(Include.NON_NULL) @JsonInclude(Include.Include.ALWAYS) 默認(rèn) @JsonInclude(Include.NON_DEFAULT) 屬性為默認(rèn)值不序列化 @JsonInclude(Include.NON_EMPTY) 屬性為 空(“”) 或者為 NULL 都不序列化 @JsonInclude(Include.NON_NULL) 屬性為NULL 不序列化
參考網(wǎng)址:
到此這篇關(guān)于Java使用ObjectMapper的簡單示例的文章就介紹到這了,更多相關(guān)Java使用ObjectMapper內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jenkins自動部署SpringBoot項(xiàng)目實(shí)踐教程
這篇文章主要介紹了Jenkins自動部署SpringBoot項(xiàng)目實(shí)踐教程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot解決Required?String?parameter?xxx?is?not?prese
這篇文章主要介紹了SpringBoot解決Required?String?parameter?xxx?is?not?present問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Spring Boot 集成 Quartz 使用Cron 表達(dá)式實(shí)現(xiàn)定
本文介紹了如何在SpringBoot項(xiàng)目中集成Quartz并使用Cron表達(dá)式進(jìn)行任務(wù)調(diào)度,通過添加Quartz依賴、創(chuàng)建Quartz任務(wù)、配置任務(wù)調(diào)度以及啟動項(xiàng)目,可以實(shí)現(xiàn)定時(shí)任務(wù)的執(zhí)行,Cron表達(dá)式提供了靈活的任務(wù)調(diào)度方式,適用于各種復(fù)雜的定時(shí)任務(wù)需求,感興趣的朋友一起看看吧2025-03-03
Java JSqlParser解析,修改和生成SQL語句的實(shí)用技巧
JSQLParser 是一個(gè)強(qiáng)大的開源 Java 庫,用于解析 SQL 并提供語法樹操作功能,本文將詳細(xì)介紹如何使用 JSQLParser,并提供常見使用場景的代碼示例,希望對大家有所幫助2025-04-04
SpringBoot項(xiàng)目啟動健康檢查的操作方法
在現(xiàn)代的微服務(wù)架構(gòu)中,容器化技術(shù)已經(jīng)成為一種主流的部署方式,Docker 作為容器化技術(shù)的代表,提供了一種輕量級、可移植的解決方案,然而,僅僅將應(yīng)用容器化是不夠的,我們還需要確保這些容器在運(yùn)行時(shí)能夠保持健康狀態(tài),這就是健康檢查發(fā)揮作用的地方2024-12-12
解決Springboot集成Redis集群配置公網(wǎng)IP連接報(bào)私網(wǎng)IP連接失敗問題
在Springboot 集成 Redis集群配置公網(wǎng)IP連接報(bào)私網(wǎng)IP連接失敗,一直報(bào)私有IP連接失敗,所以本文小編給大家介紹了如何解決報(bào)錯(cuò)問題,如果有遇到相同問題的同學(xué),可以參考閱讀本文2023-10-10
Netty進(jìn)階之ChannelPoolMap源碼解析
這篇文章主要介紹了Netty進(jìn)階之ChannelPoolMap源碼解析,ChannelPoolMap是用來存儲ChannelPool和指定key的一個(gè)集合Map,實(shí)際的應(yīng)用場景就是服務(wù)器端是一個(gè)分布式集群服務(wù),擁有多個(gè)配置地址,這樣我們就可以配置多個(gè)服務(wù)地址,減輕單臺服務(wù)器的壓力,需要的朋友可以參考下2023-11-11
使用SpringBoot創(chuàng)建一個(gè)RESTful API的詳細(xì)步驟
使用 Java 的 Spring Boot 創(chuàng)建 RESTful API 可以滿足多種開發(fā)場景,它提供了快速開發(fā)、易于配置、可擴(kuò)展、可維護(hù)的優(yōu)點(diǎn),尤其適合現(xiàn)代軟件開發(fā)的需求,幫助你快速構(gòu)建出高性能的后端服務(wù),需要的朋友可以參考下2025-01-01

