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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - ObjectMapper 如何忽略字段大小寫

ObjectMapper 如何忽略字段大小寫

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

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

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 開發(fā)對(duì)這個(gè)類應(yīng)該不陌生,沒錯(cuò),這個(gè)類是jackson提供的,主要是用來把對(duì)象轉(zhuǎn)換成為一個(gè)json字符串返回到前端,

現(xiàn)在大部分?jǐn)?shù)據(jù)交換都是以json來傳輸?shù)?所以這個(gè)很重要,那你到底又對(duì)這個(gè)類有著有多少了解呢,下面我說一下我遇到的一些坑

首先,先把我要說的幾個(gè)坑需要設(shè)置的屬性貼出來先

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

簡(jiǎn)單說一下這個(gè)類的基本用法,以下采用代碼塊加截圖的形式來說明和部分文字件數(shù)

  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. //序列化的時(shí)候序列對(duì)象的所有屬性
  12. objectMapper.setSerializationInclusion(Include.ALWAYS);
  13. //取消時(shí)間的轉(zhuǎn)化格式,默認(rèn)是時(shí)間戳,可以取消,同時(shí)需要設(shè)置要表現(xiàn)的時(shí)間格式
  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. //這是最簡(jiǎn)單的一個(gè)例子,把一個(gè)對(duì)象轉(zhuǎn)換為json字符串
  19. String personJson = objectMapper.writeValueAsString(person);
  20. System.out.println(personJson);
  21.  
  22. //默認(rèn)為true,會(huì)顯示時(shí)間戳
  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. //序列化的時(shí)候序列對(duì)象的所有屬性
  12. objectMapper.setSerializationInclusion(Include.ALWAYS);
  13. //如果是空對(duì)象的時(shí)候,不拋異常,也就是對(duì)應(yīng)的屬性沒有g(shù)et方法
  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. //默認(rèn)是true,即會(huì)拋異常
  22. objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, true);
  23. personJson = objectMapper.writeValueAsString(person);
  24. System.out.println(personJson);
  25. }
  26. }

對(duì)應(yīng)的person類此時(shí)為

  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. }

結(jié)果如下

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. //序列化的時(shí)候序列對(duì)象的所有屬性
  9. objectMapper.setSerializationInclusion(Include.ALWAYS);
  10. //反序列化的時(shí)候如果多了其他屬性,不拋出異常
  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對(duì)象中的
  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. //默認(rèn)為true
  25. objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
  26. person = objectMapper.readValue(personStr, Person.class);
  27. System.out.println(person);
  28. }
  29. }

執(zhí)行后的結(jié)果如下

ObjectMapper 如何忽略字段大小寫

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

Include.ALWAYS 是序列化對(duì)像所有屬性

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

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

然后再說一下如何把一個(gè)對(duì)象集合轉(zhuǎn)換為一個(gè) Java里面的數(shù)組

  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. //序列化的時(shí)候序列對(duì)象的所有屬性
  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. //先轉(zhuǎn)換為json字符串
  23. String personStr = objectMapper.writeValueAsString(persons);
  24.  
  25. //反序列化為L(zhǎng)ist<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 來進(jìn)行處理返回
  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. }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持我們。

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

延伸 · 閱讀

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

    升級(jí)IDEA后Lombok不能使用的解決方法

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

    程序猿DD9332021-10-08
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

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

    littleschemer13532021-05-16
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

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

    Java使用SAX解析xml的示例

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

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

    小米推送Java代碼

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

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

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

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7472021-02-04
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
主站蜘蛛池模板: 91视频综合网| 嫩草影院精品视频在线观看 | 性关系免费视频 | 国产亚洲精品九九久在线观看 | 国产成人一区二区三区视频免费蜜 | 热久久免费视频 | 精品国产福利在线观看一区 | 99看视频| 国产精品亚洲va在线观看 | 日本人做受全过程视频 | 91香蕉国产在线观看免费永久 | 久久水蜜桃亚洲AV无码精品偷窥 | 婷婷色在线播放 | 欧美日韩一区二区三在线 | 亚洲 欧美 国产 日韩 字幕 | 国产特黄一级一片免费 | 天天狠天天天天透在线 | 亚洲国产韩国欧美在线不卡 | 国产精品久久久久久久久久久久久久 | np小说h| 激情艳妇 | 日韩视频一区二区三区 | 高级黄色片 | 亚洲免费福利视频 | 高h短篇辣肉各种姿势bl | 欧美日韩一区二区三区在线播放 | 朝鲜女人free性hu | 久久精品视在线观看85 | 脱jk裙的美女露小内内无遮挡 | 精品一区二区三区高清免费不卡 | 9l国产精品久久久久麻豆 | 日本三级成人中文字幕乱码 | 亚洲精品久久中文字幕 | 国产91一区二区在线播放不卡 | 国产成人啪精品午夜在线观看 | 国内剧情麻豆 | 忘忧草秋观看未满十八 | 青青草国产一区二区三区 | 操老妇| 欧美日韩视频在线第一区二区三区 | 公交车揉捏大乳呻吟喘娇 |