一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - ObjectMapper 如何忽略字段大小寫

ObjectMapper 如何忽略字段大小寫

2021-09-18 11:04程序邊緣 Java教程

這篇文章主要介紹了使用ObjectMapper實現忽略字段大小寫操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

ObjectMapper 忽略字段大小寫

核心代碼:

  1. ObjectMapper mapper = new ObjectMapper();
  2. mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  3. mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

例子:

  1. import com.fasterxml.jackson.databind.DeserializationFeature;
  2. import com.fasterxml.jackson.databind.JsonMappingException;
  3. import com.fasterxml.jackson.databind.MapperFeature;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. public class Test{
  6. public static void main(String[] args) {
  7. try {
  8. A a = new A();
  9. a.lastname = "jack";
  10. ObjectMapper mapper = new ObjectMapper();
  11. mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  12. mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
  13. A2 convertValue = new A2();
  14. mapper.updateValue(convertValue, a);
  15. System.out.println(convertValue);
  16. } catch (JsonMappingException e) {
  17. e.printStackTrace();
  18. }
  19. }
  20.  
  21. public static class A{
  22. String lastname;
  23. public String getLastname() {
  24. return lastname;
  25. }
  26.  
  27. public void setLastname(String lastname) {
  28. this.lastname = lastname;
  29. }
  30. }
  31.  
  32. public static class A2{
  33. String lastName;
  34.  
  35. public String getLastName() {
  36. return lastName;
  37. }
  38.  
  39. public void setLastName(String lastName) {
  40. this.lastName = lastName;
  41. }
  42.  
  43. @Override
  44. public String toString() {
  45. return "A2 [lastName=" + lastName + "]";
  46. }
  47. }
  48. }

ObjectMapper 的一些坑

相信做過Java 開發對這個類應該不陌生,沒錯,這個類是jackson提供的,主要是用來把對象轉換成為一個json字符串返回到前端,

現在大部分數據交換都是以json來傳輸的,所以這個很重要,那你到底又對這個類有著有多少了解呢,下面我說一下我遇到的一些坑

首先,先把我要說的幾個坑需要設置的屬性貼出來先

  1. ObjectMapper objectMapper = new ObjectMapper();
  2.  
  3. //序列化的時候序列對象的所有屬性
  4. objectMapper.setSerializationInclusion(Include.ALWAYS);
  5.  
  6. //反序列化的時候如果多了其他屬性,不拋出異常
  7. objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  8.  
  9. //如果是空對象的時候,不拋異常
  10. objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
  11.  
  12. //取消時間的轉化格式,默認是時間戳,可以取消,同時需要設置要表現的時間格式
  13. objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
  14. objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"))

簡單說一下這個類的基本用法,以下采用代碼塊加截圖的形式來說明和部分文字件數

  1. package com.shiro.test;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import com.fasterxml.jackson.annotation.JsonInclude.Include;
  5. import com.fasterxml.jackson.databind.DeserializationFeature;
  6. import com.fasterxml.jackson.databind.ObjectMapper;
  7. import com.fasterxml.jackson.databind.SerializationFeature;
  8. public class Main2 {
  9. public static void main(String[] args) throws Exception{
  10. ObjectMapper objectMapper = new ObjectMapper();
  11. //序列化的時候序列對象的所有屬性
  12. objectMapper.setSerializationInclusion(Include.ALWAYS);
  13. //取消時間的轉化格式,默認是時間戳,可以取消,同時需要設置要表現的時間格式
  14. objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
  15. objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
  16.  
  17. Person person = new Person(1, "zxc", new Date());
  18. //這是最簡單的一個例子,把一個對象轉換為json字符串
  19. String personJson = objectMapper.writeValueAsString(person);
  20. System.out.println(personJson);
  21.  
  22. //默認為true,會顯示時間戳
  23. objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
  24. personJson = objectMapper.writeValueAsString(person);
  25. System.out.println(personJson);
  26. }
  27. }

輸出的信息如下

ObjectMapper 如何忽略字段大小寫

objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)的作用

  1. package com.shiro.test;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import com.fasterxml.jackson.annotation.JsonInclude.Include;
  5. import com.fasterxml.jackson.databind.DeserializationFeature;
  6. import com.fasterxml.jackson.databind.ObjectMapper;
  7. import com.fasterxml.jackson.databind.SerializationFeature;
  8. public class Main2 {
  9. public static void main(String[] args) throws Exception{
  10. ObjectMapper objectMapper = new ObjectMapper();
  11. //序列化的時候序列對象的所有屬性
  12. objectMapper.setSerializationInclusion(Include.ALWAYS);
  13. //如果是空對象的時候,不拋異常,也就是對應的屬性沒有get方法
  14. objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
  15.  
  16. Person person = new Person(1, "zxc", new Date());
  17.  
  18. String personJson = objectMapper.writeValueAsString(person);
  19. System.out.println(personJson);
  20.  
  21. //默認是true,即會拋異常
  22. objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, true);
  23. personJson = objectMapper.writeValueAsString(person);
  24. System.out.println(personJson);
  25. }
  26. }

對應的person類此時為

  1. package com.shiro.test;
  2. import java.util.Date;
  3. public class Person {
  4. private Integer id;
  5. private String name;
  6. private Date birthDate;
  7. // public Integer getId() {
  8. // return id;
  9. // }
  10. // public void setId(Integer id) {
  11. // this.id = id;
  12. // }
  13. // public String getName() {
  14. // return name;
  15. // }
  16. // public void setName(String name) {
  17. // this.name = name;
  18. // }
  19. // public Date getBirthDate() {
  20. // return birthDate;
  21. // }
  22. // public void setBirthDate(Date birthDate) {
  23. // this.birthDate = birthDate;
  24. // }
  25. @Override
  26. public String toString() {
  27. return "Person [id=" + id + ", name=" + name + ", birthDate=" + birthDate + "]";
  28. }
  29. public Person(Integer id, String name, Date birthDate) {
  30. super();
  31. this.id = id;
  32. this.name = name;
  33. this.birthDate = birthDate;
  34. }
  35. public Person() {
  36. // TODO Auto-generated constructor stub
  37. }
  38. }

結果如下

ObjectMapper 如何忽略字段大小寫

  1. package com.shiro.test;
  2. import com.fasterxml.jackson.annotation.JsonInclude.Include;
  3. import com.fasterxml.jackson.databind.DeserializationFeature;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. public class Main2 {
  6. public static void main(String[] args) throws Exception{
  7. ObjectMapper objectMapper = new ObjectMapper();
  8. //序列化的時候序列對象的所有屬性
  9. objectMapper.setSerializationInclusion(Include.ALWAYS);
  10. //反序列化的時候如果多了其他屬性,不拋出異常
  11. objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  12.  
  13. // Person person = new Person(1, "zxc", new Date());
  14.  
  15. // String personJson = objectMapper.writeValueAsString(person);
  16. // System.out.println(personJson);
  17.  
  18. //注意,age屬性是不存在在person對象中的
  19. String personStr = "{\"id\":1,\"name\":\"zxc\",\"age\":\"zxc\"}";
  20.  
  21. Person person = objectMapper.readValue(personStr, Person.class);
  22. System.out.println(person);
  23.  
  24. //默認為true
  25. objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
  26. person = objectMapper.readValue(personStr, Person.class);
  27. System.out.println(person);
  28. }
  29. }

執行后的結果如下

ObjectMapper 如何忽略字段大小寫

這些便是這幾個屬性的作用所以,由于第一個比較簡單我就這樣說一下吧

Include.ALWAYS 是序列化對像所有屬性

Include.NON_NULL 只有不為null的字段才被序列化

Include.NON_EMPTY 如果為null或者 空字符串和空集合都不會被序列化

然后再說一下如何把一個對象集合轉換為一個 Java里面的數組

  1. package com.shiro.test;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.List;
  5. import com.fasterxml.jackson.annotation.JsonInclude.Include;
  6. import com.fasterxml.jackson.core.type.TypeReference;
  7. import com.fasterxml.jackson.databind.JavaType;
  8. import com.fasterxml.jackson.databind.ObjectMapper;
  9. public class Main2 {
  10. public static void main(String[] args) throws Exception{
  11. ObjectMapper objectMapper = new ObjectMapper();
  12. //序列化的時候序列對象的所有屬性
  13. objectMapper.setSerializationInclusion(Include.NON_DEFAULT);
  14.  
  15. Person person1 = new Person(1, "zxc", new Date());
  16. Person person2 = new Person(2, "ldh", new Date());
  17.  
  18. List<Person> persons = new ArrayList<>();
  19. persons.add(person1);
  20. persons.add(person2);
  21.  
  22. //先轉換為json字符串
  23. String personStr = objectMapper.writeValueAsString(persons);
  24.  
  25. //反序列化為List<user> 集合,1需要通過 TypeReference 來具體傳遞值
  26. List<Person> persons2 = objectMapper.readValue(personStr, new TypeReference<List<Person>>() {});
  27.  
  28. for(Person person : persons2) {
  29. System.out.println(person);
  30. }
  31.  
  32. //2,通過 JavaType 來進行處理返回
  33. JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, Person.class);
  34. List<Person> persons3 = objectMapper.readValue(personStr, javaType);
  35.  
  36. for(Person person : persons3) {
  37. System.out.println(person);
  38. }
  39. }
  40. }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持我們。

原文鏈接:https://blog.csdn.net/weixin_42713970/article/details/88061100

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
主站蜘蛛池模板: 日本在线观看www免费 | 99re在线视频免费观看 | 含羞草国产亚洲精品岁国产精品 | 成人免费在线视频网 | 99久久一区二区精品 | 桃色综合网 | 亚洲色图色 | 黄片毛片 | 女子监狱第二季未删减在线看 | 黑人与欧洲女子性大战 | 欧美成人免费观看的 | 国产在线播放91 | 国产欧美日韩高清专区ho | 91视频国产自拍 | 俄罗斯美女大逼 | 免费老外的毛片清高 | 久久精品午夜一区二区福利 | 欧美在线播放一区二区 | 精品在线看 | 楚乔传第二部免费观看全集完整版 | 精品人人做人人爽久久久 | 国产资源免费观看 | 国产永久免费爽视频在线 | 国产精品麻豆免费版 | 波多野结中文字幕在线69视频 | 垫底辣妹免费观看完整版 | 亚洲国产成人精品激情 | 红楼梦黄色小说 | 色综合久久综精品 | 成全视频在线观看免费 | 67194最新网址 | 视频一区在线免费观看 | 亚洲国产精品婷婷久久久久 | 暖暖视频高清图片免费完整版 | 秘书小说 | 日本中文字幕一区二区高清在线 | 日本嫩交| 免费一级特黄特色大片在线观看 | 欧美影院一区二区三区 | 1313午夜精品理伦片 | 精品无码国产AV一区二区三区 |