jackson解析json的大写Key报错

今天在测试jackson解析json串时,发现如果json串中,Key的值为大写的话,那么解析就会报错,这里给大家复现一下以及提供一种解决方案:

首先,我们建立一个实体类:这里简单定义了name,sex,age三个属性,以及get set tostring方法。​

public class Student {
	private String name;
	private String sex;
	private Integer age;
	public String getName() {
		return name;
	}
	public String getSex() {
		return sex;
	}
	public Integer getAge() {
		return age;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}
}

然后我们写一个测试类:​

@Test
	public void testJackson() throws Exception {
		String jsonStr = "{\"age\":20,\"name\":\"lisi\",\"Sex\":\"男\"}";
		ObjectMapper om = new ObjectMapper();
		Student stu = om.readValue(jsonStr, Student.class);
		System.out.println(stu);
	}

这里运行,我们会报错无法识别的filed:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field 

这个问题可以在我另一篇文章里找到解决方案,需要的可以详细看一下:
(https://blog.csdn.net/MrHamster/article/details/85268990)

这里直接给出解决方案,在类上加@JsonIgnoreProperties(ignoreUnknown = true),就可以忽略掉不认识的field
在这里插入图片描述
加上注解后,我们继续运行测试类,发现虽然可以正常运行了,但运行结果却是:Student [name=lisi, sex=null, age=20],sex这个字段没有被成功赋值。原因是jackson不支持大写的Key去解析,fastjson是可以成功支持这个的,fastjson会忽略大小写。

但是项目中假如已经使用了jackson,现在再进行更换,难免会提高难度,所以我们换一种方法去解决这个问题:我们在实体类的对应字段上加:@JsonProperty(value = “XXX”),这里的XXX就是大写的key,这样的话,jackson就会根据这个XXX去把值赋到实体类对应的字段中。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值