jackson解析json的大写Key报错

冷不防 2022-04-02 13:51 484阅读 0赞

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

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

  1. public class Student {
  2. private String name;
  3. private String sex;
  4. private Integer age;
  5. public String getName() {
  6. return name;
  7. }
  8. public String getSex() {
  9. return sex;
  10. }
  11. public Integer getAge() {
  12. return age;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. public void setSex(String sex) {
  18. this.sex = sex;
  19. }
  20. public void setAge(Integer age) {
  21. this.age = age;
  22. }
  23. @Override
  24. public String toString() {
  25. return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";
  26. }
  27. }

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

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

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

  1. 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去把值赋到实体类对应的字段中。
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,484人围观)

还没有评论,来说两句吧...

相关阅读

    相关 jackson解析json大写Key

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