欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用ObjectMapper的簡(jiǎn)單示例

 更新時(shí)間:2020年09月18日 09:34:11   作者:學(xué)海無涯519  
這篇文章主要介紹了Java使用ObjectMapper的簡(jiǎn)單示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、什么是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的自動(dòng)配置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對(duì)象、集合轉(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);
 
     // 對(duì)象轉(zhuǎn)換為JSON
     String userJsonString = objectMapper.writeValueAsString(user); 
     // 集合轉(zhuǎn)換為JSON
     String userListJsonString = objectMapper.writeValueAsString(userList); }

2.2.2 JSON轉(zhuǎn)Java對(duì)象、集合

// JOSN轉(zhuǎn)對(duì)象(java對(duì)象)
    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對(duì)象圖。

// 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)對(duì)象、集合

// jsonNode轉(zhuǎn)為json字符串
    String jsonNodeString = objectMapper.writeValueAsString(jsonNode);
    String jsonNodeListString = objectMapper.writeValueAsString(jsonNodeList);

    // json字符串轉(zhuǎn)對(duì)象、集合
    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ù)獲取過來的對(duì)象,如果從Object強(qiáng)轉(zhuǎn)為自定義的類型會(huì)報(bào)錯(cuò),利用ObjectMapper轉(zhuǎn)換。

正確示例:

  說明:Schedule類、OutpOrderBill類都是類似于User類的Java對(duì)象。

// 對(duì)象
Schedule schedule = objectMapper.convertValue(callNurseCenterService.getSchedule(registRecord.getScheCode()).getData(), Schedule.class);

// 泛型為對(duì)象的集合
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è)成空就不序列化等的需求,可以在類的屬性上或直接在類上加上一下注解。用在屬性上就是只針對(duì)一個(gè)屬性,用在類上就是針對(duì)類里的所有屬性。

@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)址:

Jackson-1.9.9在線文檔

到此這篇關(guān)于Java使用ObjectMapper的簡(jiǎn)單示例的文章就介紹到這了,更多相關(guān)Java使用ObjectMapper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java如何實(shí)現(xiàn)壓縮文件與解壓縮zip文件

    Java如何實(shí)現(xiàn)壓縮文件與解壓縮zip文件

    這篇文章主要介紹了Java如何實(shí)現(xiàn)壓縮文件與解壓縮zip文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringBoot熱部署啟動(dòng)關(guān)閉流程詳解

    SpringBoot熱部署啟動(dòng)關(guān)閉流程詳解

    Spring?Boot啟動(dòng)熱部署是一種技術(shù),它能讓開發(fā)者在不重啟應(yīng)用程序的情況下實(shí)時(shí)更新代碼。這樣可以提高開發(fā)效率,避免頻繁重啟應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-04-04
  • Java并發(fā)編程之原子變量與非阻塞同步機(jī)制

    Java并發(fā)編程之原子變量與非阻塞同步機(jī)制

    這篇文章主要介紹了Java并發(fā)編程之原子變量與非阻塞同步機(jī)制,本文講解了非阻塞算法、悲觀技術(shù)、樂觀技術(shù)、CAS操作、原子變量、性能比較:鎖與原子變量等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 詳解Java中使用externds關(guān)鍵字繼承類的用法

    詳解Java中使用externds關(guān)鍵字繼承類的用法

    子類使用extends繼承父類是Java面向?qū)ο缶幊讨械幕A(chǔ)知識(shí),這里我們就來詳解Java中使用externds關(guān)鍵字繼承類的用法,需要的朋友可以參考下
    2016-07-07
  • MyBatis結(jié)果映射(ResultMap)的使用

    MyBatis結(jié)果映射(ResultMap)的使用

    在MyBatis中,結(jié)果映射是實(shí)現(xiàn)數(shù)據(jù)庫結(jié)果集到Java對(duì)象映射的核心,它不僅支持簡(jiǎn)單的字段映射,還能處理字段名不一致、嵌套對(duì)象和集合映射等復(fù)雜場(chǎng)景,通過ResultMap,開發(fā)者可以靈活定義映射關(guān)系,以適應(yīng)各種需求,感興趣的可以了解一下
    2024-09-09
  • MyBatis注解開發(fā)-@Insert和@InsertProvider的使用

    MyBatis注解開發(fā)-@Insert和@InsertProvider的使用

    這篇文章主要介紹了MyBatis注解開發(fā)-@Insert和@InsertProvider的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-07-07
  • 淺談hibernate中多表映射關(guān)系配置

    淺談hibernate中多表映射關(guān)系配置

    下面小編就為大家?guī)硪黄獪\談hibernate中多表映射關(guān)系配置。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • logback使用filter過濾日志操作

    logback使用filter過濾日志操作

    這篇文章主要介紹了logback使用filter過濾日志操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Spring中BeanFactoryPostProcessors是如何執(zhí)行的

    Spring中BeanFactoryPostProcessors是如何執(zhí)行的

    BeanFactoryPostProcessor是Spring容器提供的一個(gè)擴(kuò)展機(jī)制,它允許開發(fā)者在Bean的實(shí)例化和初始化之前對(duì)BeanDefinition進(jìn)行修改和處理,這篇文章主要介紹了你知道Spring中BeanFactoryPostProcessors是如何執(zhí)行的嗎,需要的朋友可以參考下
    2023-11-11
  • Java使用Lettuce客戶端在Redis在主從復(fù)制模式下命令執(zhí)行的操作

    Java使用Lettuce客戶端在Redis在主從復(fù)制模式下命令執(zhí)行的操作

    這篇文章主要介紹了Java使用Lettuce客戶端在Redis在主從復(fù)制模式下命令執(zhí)行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評(píng)論