ObjectMapper 如何忽略字段大小写
作者:程序边缘 发布时间:2023-07-31 07:07:18
标签: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.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;
//}
@Override
public 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
}
}
结果如下
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);
//默认为true
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
person = objectMapper.readValue(personStr, Person.class);
System.out.println(person);
}
}
执行后的结果如下
这些便是这几个属性的作用所以,由于第一个比较简单我就这样说一下吧
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);
}
}
}
来源:https://blog.csdn.net/weixin_42713970/article/details/88061100


猜你喜欢
- JAVA是面向对象的语言,开发者在操作数据的时候,通常更习惯面对一个特定类型的对象,如一个用户就是一个User类的对象。DAO层需要做的,就
- 之前学完了Java SE的知识,掌握了面向对象的编程思想,但对集合、多线程、反射、流的使用等内容理解的还不是很深入,打算再学习数据结构与算法
- 微软官方的MSDN上说async和await是“异步”,但是不少人(包括笔者自己)都有一些误区需要澄清:为什么await语句之后没有执行?不
- 本文实例为大家分享了java排序算法之冒泡排序的具体代码,供大家参考,具体内容如下冒泡排序冒泡排序无疑是最为出名的排序算法之一,从序列的一端
- 1、cmd指令,进入.svn目录,找到wc.db文件 sqlite 3 打开2、 对 svn源代码目录 右键, clean up, 稍等1至
- 本文实例讲述了java编程实现基于UDP协议传输数据的方法。分享给大家供大家参考,具体如下:UDP协议(User Datagram Prot
- 本文实例为大家分享了Android Studio实现智能聊天的具体代码,供大家参考,具体内容如下1、布局activit_main.xml&l
- 初看 cgaolei 翻译的 Java技巧之双括弧初始化 一文,走马观花,只知用法,未细看后面的解释。蔚为惊艳,心里想 Java 竟然有这么
- C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式。本文总结了通用的算法并结合了自己的一点小经验,分享给大家
- 1、打开代码管理器2、打开后就可以看到如下图所示3、复制粘贴该路径,转到该文件夹下新加一个txt文件,把下面的文本复制粘贴<?xml
- 一.整型变量1.基本格式int 变量名 = 初始值;代码示例:public class CSDN {public static void m
- 引入字体首先在项目中创建fonts目录,然后将将ttf文件放到该目录下,然后在pubspec文件中添加该字体文件,如:...flutter:
- 本文为大家分享了一个满足在线网页交流需求的实例,由于java Socket实现的网页版在线聊天功能,供大家参考,具体内容如下实现步骤:1、使
- 带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义。通过
- 本文实例讲述了Android中SeekBar和RatingBar用法。分享给大家供大家参考,具体如下:什么是SeekBar?可以拖动的进度条
- 什么是状态管理状态管理是一个十分广泛的概念,因为状态无处不在。从广义角度讲状态管理就是页面跟代码、跟服务器进行数据同步。例如:你在某购物应用
- 1. C#实现复数类我们在进行信号分析的时候,难免会使用到复数。但是遗憾的是,C#没有自带的复数类,以下提供了一种复数类的构建方法。复数相比
- System.getProperty()的作用及使用最近在看一些代码时,很多地方都用到了System.getProperty()、Syste
- 前言最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选择功能强大的freemarker+固定格
- 如何实现首先 * 是属于web这块的,那我们需要引入springboot web模块,具体版本在parent中<dependency&