jackson InvalidDefinitionException 异常原因及解决方案

这篇具有很好参考价值的文章主要介绍了jackson InvalidDefinitionException 异常原因及解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这是一次在给已有类添加新字段时,因为原来的字段已有构造方法,为了避免对老代码修改产生bug,所以新字段我把老构造方法重新复制改了一下,然后就报如下错误

java.lang.IllegalArgumentException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException
示例日志如下

Exception in thread "main" java.lang.IllegalArgumentException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Conflicting property-based creators: already had explicitly marked creator [constructor for xxx.User, annotations: {interface java.beans.ConstructorProperties=@java.beans.ConstructorProperties(value=[id, name, age])}], encountered another: [constructor for xxx.User, annotations: {interface java.beans.ConstructorProperties=@java.beans.ConstructorProperties(value=[id, name])}]
 at [Source: (String)"{"name":"张三","id":"1234","age":11}"; line: 1, column: 1]

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Conflicting property-based creators: already had explicitly marked creator [constructor for xxx.User, annotations: {interface java.beans.ConstructorProperties=@java.beans.ConstructorProperties(value=[id, name, age])}], encountered another: [constructor for xxx.User, annotations: {interface java.beans.ConstructorProperties=@java.beans.ConstructorProperties(value=[id, name])}]
 at [Source: (String)"{"name":"张三","id":"1234","age":11}"; line: 1, column: 1]
	at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:62)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:227)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:143)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:414)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
	at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
	at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:491)
	at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:4669)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4478)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3434)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3402)

1.问题代码文章来源地址https://www.toymoban.com/news/detail-613529.html

class User {
    private String id;
    private String name;
    private Integer age;


    @ConstructorProperties({"id", "name"})
    public User(String id, String name) {
        this.id = id;
        this.name = name;
    }

    @ConstructorProperties({"id", "name", "age"})
    public User(String id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", User.class.getSimpleName() + "[", "]").add("id='" + id + "'").add("name='" + name + "'").add("age=" + age).toString();
    }
  • 因为是复制出来改的,导致有2个构造方法,并且两个方法上都有 @ConstructorProperties 注解,然后 jackson 在创建对象时不知道使用哪个构造方法了,所以报错
  • 把多余的构造方法去掉,使用字段多的构造方法
  • 一个类只能有一个构造方法使用 @ConstructorProperties

到了这里,关于jackson InvalidDefinitionException 异常原因及解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 飞鱼星路由链路异常的原因以及解决方法

    对路由器的链路,相信大家一定很了解了,这里就不啰嗦了,本篇主要给大家解决路由器链路一侧连接正常,另一侧不正常的故障,组网环境为飞鱼星路由器,相信对你一定有所帮助的。   一、组网环境 路由器A与路由器B通过多模光纤互连,运行一段时间后出现路由器A一侧

    2024年02月05日
    浏览(36)
  • java.lang.IllegalStateException异常原因和解决

    Iterator.remove() 迭代删除 引发 1. Iterator.remove() 迭代删除 引发 场景示例 问题分析

    2024年02月16日
    浏览(58)
  • Kafka数据丢失原因及解决方案

    Kafka包括Producer、Broker、Consumer,因此从这三个方面分析。 丢失原因:Kafka在Producer端的消息发送采用的是异步发送的方式(还有同步发送,但是同步发送会导致消息阻塞、需要等待),丢失数据是因为消息没有到达Broker端,原因可能是网络波动导致没有回调和数据消息太大超出

    2024年02月14日
    浏览(33)
  • 常见的内存泄漏原因和解决方案

    1.全局引用 问题:在JavaScript代码中,使用全局变量或全局对象来保存对DOM元素或其他对象的引用,这可能导致内存泄漏。 解决方案:避免使用全局变量或全局对象,改用合适的作用域来管理变量和对象的生命周期。确保在不再需要时正确地释放这些引用。 2.事件监听器 问题

    2024年02月13日
    浏览(47)
  • RabbitMq消息丢失原因及其解决方案

    我们首先了解下一条消息从生产到消费的整个流程如下: 生产--MQ Broker -- 消费。所以这三个环节都有丢失消息的可能。 1.1、生产者丢失消息 生产者将数据发送到rabbitmq的时候,可能因为网络问题导致数据就在半路给搞丢了。 1.使用事务(性能差) ​ RabbitMQ 客户端中与事务机

    2024年02月08日
    浏览(45)
  • 线程安全问题的原因和解决方案

    如果某个代码,在单线程执行下没有问题,在多线程执行下执行也没有问题,则称“线程安全”,反之称“线程不安全”。 目录 前言 一、简述线程不安全案例 二、线程安全问题的原因 (一)(根本问题)线程调度是随机的 (二)代码的结构问题 (三)代码执行不是原子的

    2024年02月14日
    浏览(42)
  • 视频加载失败的原因及解决方案

    视频加载失败是在网页中常见的问题之一。当用户尝试播放上传的视频时,有时会遇到部分视频加载失败的情况。下面将详细讨论可能导致视频加载失败的原因,并提供相应的解决方案。 视频文件路径错误:视频加载失败的一个常见原因是视频文件路径错误。当在网页中嵌入

    2024年02月05日
    浏览(516)
  • Handler内存泄漏原因及解决方案

    在Activity中,将Handler声明成非静态内部类或匿名内部类,这样Handle默认持有外部类Activity的引用。如果Activity在销毁时,Handler还有未执行完或者正在执行的Message,而Handler又持有Activity的引用,导致GC无法回收Activity,导致内存泄漏。如以下两种情形可能导致内存泄漏 1、在Act

    2024年02月16日
    浏览(60)
  • scanf不安全原因和解决方案

    方法一: 在头文件中加入#define _CRT_SECURE_NO_WARNINGS 通过项目 - 属性 - C/C++ - 预处理器 - 预处理器定义 - 编辑,在框内写入 _CRT_SECURE_NO_WARNINGS 方法二: 在头文件上面加入一行命令: 前言:scanf,fopen,gets,strcpy,strcat等都是c语言的标准函数,但是这些函数都有缺陷是不安全的

    2024年02月07日
    浏览(42)
  • java.lang.NoSuchMethodError异常原因及解决办法

    java.lang.NoSuchMethodError异常原因及解决办法 第一种简单的情况就是本类中需要调用的方法名称错误,这种情况就需要去检查方法名称是否正确,避免调用的方法和本类中的有相同的名称。 第二种情况就是jar包的问题 可能是jar包没有导入进来或者jar包导入错误,导致出现异常。

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包