文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ObjectMapper怎么忽略字段大小写

2023-06-20 11:58

关注

本篇内容主要讲解“ObjectMapper怎么忽略字段大小写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ObjectMapper怎么忽略字段大小写”吧!

ObjectMapper 忽略字段大小写

核心代码:

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

例子:

import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.JsonMappingException;import com.fasterxml.jackson.databind.MapperFeature;import com.fasterxml.jackson.databind.ObjectMapper; public class Test{    public static void main(String[] args) {  try {   A a = new A();   a.lastname = "jack";   ObjectMapper mapper = new ObjectMapper();   mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);   mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);   A2 convertValue = new A2();     mapper.updateValue(convertValue, a);   System.out.println(convertValue);  } catch (JsonMappingException e) {   e.printStackTrace();  } }  public static class A{  String lastname;   public String getLastname() {   return lastname;  }   public void setLastname(String lastname) {   this.lastname = lastname;  }  }  public static class A2{  String lastName;   public String getLastName() {   return lastName;  }   public void setLastName(String lastName) {   this.lastName = lastName;  }   @Override  public String toString() {   return "A2 [lastName=" + lastName + "]";  }    }}

ObjectMapper 的一些坑

相信做过Java 开发对这个类应该不陌生,没错,这个类是jackson提供的,主要是用来把对象转换成为一个json字符串返回到前端,

现在大部分数据交换都是以json来传输的,所以这个很重要,那你到底又对这个类有着有多少了解呢,下面我说一下我遇到的一些坑

首先,先把我要说的几个坑需要设置的属性贴出来先

ObjectMapper objectMapper = new ObjectMapper();    //序列化的时候序列对象的所有属性  objectMapper.setSerializationInclusion(Include.ALWAYS);    //反序列化的时候如果多了其他属性,不抛出异常  objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);    //如果是空对象的时候,不抛异常  objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);    //取消时间的转化格式,默认是时间戳,可以取消,同时需要设置要表现的时间格式  objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);  objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"))

简单说一下这个类的基本用法,以下采用代码块加截图的形式来说明和部分文字件数

package com.shiro.test; import java.text.SimpleDateFormat;import java.util.Date; import com.fasterxml.jackson.annotation.JsonInclude.Include;import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature; public class Main2 { public static void main(String[] args) throws Exception{  ObjectMapper objectMapper = new ObjectMapper();  //序列化的时候序列对象的所有属性  objectMapper.setSerializationInclusion(Include.ALWAYS);  //取消时间的转化格式,默认是时间戳,可以取消,同时需要设置要表现的时间格式  objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);  objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));    Person person = new Person(1, "zxc", new Date());  //这是最简单的一个例子,把一个对象转换为json字符串  String personJson = objectMapper.writeValueAsString(person);  System.out.println(personJson);    //默认为true,会显示时间戳  objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);  personJson = objectMapper.writeValueAsString(person);  System.out.println(personJson); }}

输出的信息如下

ObjectMapper怎么忽略字段大小写

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

package com.shiro.test; import java.text.SimpleDateFormat;import java.util.Date; import com.fasterxml.jackson.annotation.JsonInclude.Include;import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature; public class Main2 {public static void main(String[] args) throws Exception{ObjectMapper objectMapper = new ObjectMapper();//序列化的时候序列对象的所有属性objectMapper.setSerializationInclusion(Include.ALWAYS);//如果是空对象的时候,不抛异常,也就是对应的属性没有get方法objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);Person person = new Person(1, "zxc", new Date()); String personJson = objectMapper.writeValueAsString(person);System.out.println(personJson);//默认是true,即会抛异常objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, true);personJson = objectMapper.writeValueAsString(person);System.out.println(personJson);}}

对应的person类此时为

package com.shiro.test; import java.util.Date; public class Person { private Integer id;private String name;private Date birthDate;//public Integer getId() {//return id;//}//public void setId(Integer id) {//this.id = id;//}//public String getName() {//return name;//}//public void setName(String name) {//this.name = name;//}//public Date getBirthDate() {//return birthDate;//}//public void setBirthDate(Date birthDate) {//this.birthDate = birthDate;//}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", birthDate=" + birthDate + "]";}public Person(Integer id, String name, Date birthDate) {super();this.id = id;this.name = name;this.birthDate = birthDate;}public Person() {// TODO Auto-generated constructor stub}}

结果如下

ObjectMapper怎么忽略字段大小写

package com.shiro.test; import com.fasterxml.jackson.annotation.JsonInclude.Include;import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.ObjectMapper; public class Main2 {public static void main(String[] args) throws Exception{ObjectMapper objectMapper = new ObjectMapper();//序列化的时候序列对象的所有属性objectMapper.setSerializationInclusion(Include.ALWAYS);//反序列化的时候如果多了其他属性,不抛出异常objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);//Person person = new Person(1, "zxc", new Date()); //String personJson = objectMapper.writeValueAsString(person);//System.out.println(personJson);//注意,age属性是不存在在person对象中的String personStr = "{\"id\":1,\"name\":\"zxc\",\"age\":\"zxc\"}";Person person = objectMapper.readValue(personStr, Person.class);System.out.println(person);//默认为trueobjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);person = objectMapper.readValue(personStr, Person.class);System.out.println(person);}}

执行后的结果如下

ObjectMapper怎么忽略字段大小写

这些便是这几个属性的作用所以,由于第一个比较简单我就这样说一下吧

Include.ALWAYS 是序列化对像所有属性

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

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

然后再说一下如何把一个对象集合转换为一个 Java里面的数组

package com.shiro.test; import java.util.ArrayList;import java.util.Date;import java.util.List; import com.fasterxml.jackson.annotation.JsonInclude.Include;import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.JavaType;import com.fasterxml.jackson.databind.ObjectMapper; public class Main2 {public static void main(String[] args) throws Exception{ObjectMapper objectMapper = new ObjectMapper();//序列化的时候序列对象的所有属性objectMapper.setSerializationInclusion(Include.NON_DEFAULT);Person person1 = new Person(1, "zxc", new Date());Person person2 = new Person(2, "ldh", new Date());List<Person> persons = new ArrayList<>();persons.add(person1);persons.add(person2);//先转换为json字符串String personStr = objectMapper.writeValueAsString(persons);//反序列化为List<user> 集合,1需要通过 TypeReference 来具体传递值List<Person> persons2 = objectMapper.readValue(personStr, new TypeReference<List<Person>>() {});for(Person person : persons2) {System.out.println(person);}//2,通过 JavaType 来进行处理返回JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, Person.class);List<Person> persons3 = objectMapper.readValue(personStr, javaType);for(Person person : persons3) {System.out.println(person);}}}

到此,相信大家对“ObjectMapper怎么忽略字段大小写”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯