解析JSON字符串报错:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field “st

本文讲述了在使用JacksonObjectMapper将JSON字符串转换为Java对象时,由于属性名不匹配导致的UnrecognizedPropertyException。解决方案是通过设置DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES为false来忽略未知属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、报错信息

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "stu_id1" (class com.txc.objectmapper.bean.Student), not marked as ignorable (2 known properties: "stu_id", "stu_name"])

 at [Source: (String)"{"stu_id1":"1001","stu_name":"晓春""; line: 1, column: 13] (through reference chain: com.txc.objectmapper.bean.Student["stu_id1"])

         at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61) ~[jackson-databind-2.13.5.jar:2.13.5]

2、问题分析

出现这个问题的原因是将JSON字符串转化成对象的时候,JSON字符串中出现了属性名称与对象中的名称不一致的情况,而造成的解析错误。

案例:如对象字段如下:

public class Student {
    private String stu_id;
    private String stu_name;
}

JSON字符串如下:

String param = "{\"stu_id1\":\"1001\",\"stu_name\":\"晓春\"";
两者比较:

Student中的是stu_id而param中的是stu_id1

错误代码展示
 

@RequestMapping("/commonQuestion1")
@ResponseBody
public  void  commonQuestion1() throws Exception{
    ObjectMapper mapper = new ObjectMapper();
    String param = "{\"stu_id1\":\"1001\",\"stu_name\":\"晓春\"";
    //将字符串转换为对象
    Student student = mapper.readValue(param, Student.class);
    System.out.println("===json转对象==="+student.toString());
}

3、解决方案

通过如下配置解决:

  mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

说明:

    readValue实现将JSON字符串转化成对应的Student对象。

正确代码展示:

@RequestMapping("/commonQuestion1")
@ResponseBody
public  void  commonQuestion1() throws Exception{
    ObjectMapper mapper = new ObjectMapper();
    //忽略未知字段
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    String param = "{\"stu_id1\":\"1001\",\"stu_name\":\"晓春\"}";
    //将字符串转换为对象
    Student student = mapper.readValue(param, Student.class);
    System.out.println("===json转对象==="+student.toString());
}

 

 

### 回答1: 这个错误是因为缺少“com.fasterxml.jackson.databind.exc.InvalidDefinitionException”这个类,可能是因为相应的依赖库没有被正确引入。建议检查依赖库的配置并重新构建项目。 ### 回答2: 这是一个Spring框架异常的错误信息,主要是因为在创建Spring bean 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter'时出错,导致实例化bean的过程失败。具体原因是构造函数抛出了异常,而异常本身的原因是找不到com.fasterxml.jackson.databind.exc.InvalidDefinitionException这个类。 首先,我们可以看出来这个异常涉及到了JSON转换,因为InvalidDefinitionException是Jackson JSON库中的一个异常类。这个异常类通常被用于报告一个JsonMappingException或者JsonProcessingException,当序列化或反序列化一个对象时遇到了一些意外的情况,比如不能识别的属性或者类型等等。 在Spring中,如果我们想要使用JSON转换的功能,就需要依赖于Jackson库,包括jackson-core、jackson-databindjackson-annotations等几个模块。如果我们没有正确地导入这些依赖,或者版本不匹配,就有可能出现上述异常。 解决这个异常的方法可以有以下几种: 1. 确认所使用的Jackson库的版本与Spring框架的版本匹配,可以通过查看pom.xml文件或者gradle文件实现版本的对齐。 2. 确认依赖是否完整,确定所需的Jackson库的所有依赖都已正确地添加到项目中,确保没有遗漏。 3. 如果仍然无法解决问题,则可以尝试更新Jackson库的版本,特别是对于那些已知存在漏洞或兼容性问题的旧版本。 4. 如果以上方法都不能解决问题,那么可以考虑使用其他的JSON库或者其他的Spring组件解决问题。 ### 回答3: 这个异常是由于在创建Spring的RequestMappingHandlerAdapter时出现了错误导致的。RequestMappingHandlerAdapter是一个重要的类,负责将请求映射到特定的方法上,并处理请求和响应的一些细节。 然而,在实例化这个类的时候,发生了一个被称为BeanInstantiationException的异常。这个异常是由于构造函数遇到了一个异常导致的。进一步的嵌套异常显示了这个构造函数抛出了一个java.lang.noclassdeffounderror异常,即找不到指定的类。 具体来说,这个异常是由于缺少一个被称为com.fasterxml.jackson.databind.exc.InvalidDefinitionException的类。这个类是Jackson库的一部分,它是用于处理JSON序列化和反序列化的工具。在这里,由于缺失该类,Spring无法正确地配置请求处理器。 为了解决这个问题,我们需要确保Jackson库已经正确地配置,并且所有的依赖项已经正确地添加到类路径中。我们可以通过检查pom.xml文件或Gradle构建配置以确保这些依赖项已经添加。此外,我们还可以通过在应用程序中添加缺失的依赖项来修复这个问题。 总之,这个异常是由于在创建RequestMappingHandlerAdapter时发生的错误导致的。为了解决这个问题,我们需要确保所有的依赖项已经添加,并且Jackson库已经正确地配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾林小妖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值