首页 \ 问答 \ 将Jackson与JSON反序列化为多态类型 - 一个完整的例子给我一个编译错误(Deserialize JSON with Jackson into Polymorphic Types - A Complete Example is giving me a compile error)

将Jackson与JSON反序列化为多态类型 - 一个完整的例子给我一个编译错误(Deserialize JSON with Jackson into Polymorphic Types - A Complete Example is giving me a compile error)

我试图通过一个来自程序员布鲁斯的教程来解决多态JSON的反序列化问题。

完整的列表可以在这里找到程序员布鲁斯教程 (伟大的东西btw)

我已经完成了前五项任务,但没有遇到任何问题,但最后一项(例6)遇到了困难,这当然是我真正需要的工作。

我在编译时遇到以下错误

ObjectMapper类型中的readValue(JsonParser,Class)方法不适用于参数(ObjectNode,Class)

这是由大量的代码引起的

  public Animal deserialize(  
      JsonParser jp, DeserializationContext ctxt)   
      throws IOException, JsonProcessingException  
  {  
    ObjectMapper mapper = (ObjectMapper) jp.getCodec();  
    ObjectNode root = (ObjectNode) mapper.readTree(jp);  
    Class<? extends Animal> animalClass = null;  
    Iterator<Entry<String, JsonNode>> elementsIterator =   
        root.getFields();  
    while (elementsIterator.hasNext())  
    {  
      Entry<String, JsonNode> element=elementsIterator.next();  
      String name = element.getKey();  
      if (registry.containsKey(name))  
      {  
        animalClass = registry.get(name);  
        break;  
      }  
    }  
    if (animalClass == null) return null;  
    return mapper.readValue(root, animalClass);
  }  
} 

具体由行

返回mapper.readValue(root,animalClass);

有没有人遇到过,如果是这样,有没有解决方案?

我会很感激任何人都可以提前致谢Jon D.


I am attempting to work through a tutorial from Programmer Bruce that is supposed to allow the deserialization of polymorphic JSON.

The complete list can be found here Programmer Bruce tutorials (Great stuff btw)

I have worked through the first five with no problems but I have hit a snag on the last one (Example 6), which of course is the one I really need to get working.

I am getting the following error at compile time

The method readValue(JsonParser, Class) in the type ObjectMapper is not applicable for the arguments (ObjectNode, Class)

and it's being caused by the chunk of code

  public Animal deserialize(  
      JsonParser jp, DeserializationContext ctxt)   
      throws IOException, JsonProcessingException  
  {  
    ObjectMapper mapper = (ObjectMapper) jp.getCodec();  
    ObjectNode root = (ObjectNode) mapper.readTree(jp);  
    Class<? extends Animal> animalClass = null;  
    Iterator<Entry<String, JsonNode>> elementsIterator =   
        root.getFields();  
    while (elementsIterator.hasNext())  
    {  
      Entry<String, JsonNode> element=elementsIterator.next();  
      String name = element.getKey();  
      if (registry.containsKey(name))  
      {  
        animalClass = registry.get(name);  
        break;  
      }  
    }  
    if (animalClass == null) return null;  
    return mapper.readValue(root, animalClass);
  }  
} 

Specifically by the line

return mapper.readValue(root, animalClass);

Has anyone run into this before and if so, was there a solution?

I'd appreciate any help anyone can give Thanks in advance Jon D.


原文:https://stackoverflow.com/questions/30362446
更新时间:2023-09-28 11:09

最满意答案

学习一门编程语言分为3个阶段。

第一阶段:熟悉语言,会使用这种语言实现一些较简单的逻辑和功能。

第二阶段:深入理解该类型语言,并可以从很高的高度来编程,可以编出逻辑清晰、代码紧凑、效率高并且具有高度可扩展性和安全性的代码。

第三阶段:熟悉算法和数据结构,可以从操作系统、硬件层级来理解所编成程序,熟悉编译原理,并且可以把绝大多数语言融汇贯通。并且学会了一到二样主流的工具,成为了一个可以独立完成专业软件的设计、编写的高手。

实话实说,第一阶段随便谁,只要他认得英文字母,应该都不难达到。

第二阶段,需要你一定的付出!必须要专业,不管是学还是用。比如说你学java,对OOP必须要有相当的了解。对于初中毕业的学历,要理解是要花一番苦功夫的。不过只要努力,有天赋,应该不难突破第二层。

第三层,你需要补的课太多了。建议去买几本书:单片机或者是8086cpu手册或者是介绍都行,编译原理,操作系统,数据结构和算法,计算机体系结构,计算机网络。不要不重视理论,理论都是实践的结晶。没有理论的人永远是个门外汉,永远不会专业。学过和没学过的差距远远超出你的想象。

如果你突破了第三境界,我相信你可以赚很多钱!当然怎么说服面试官你的学历不代表你的水平也需要你一定的能力。但是你如果突破了第三境界,相信你只要说出几句话来,面试官就会了解坐在他面前的人是一个高手。

对于一个初中毕业的人来说,这些真的太难了!而且最后你会发现可能编程没你想的那么有趣。 

建议学习方法:对于java来说!先去买一本java编程思想,这是经典的教材,也是最容易理解的一本。其他的书永远不会对你有用。一口吃不成一个胖子,一步一步来!其中关于容器啊之类的GUI之类的可以先不看,先掌握语言的基本架构。然后可以去看看一些编程实例;可以结合百度来学习。等学到第二境界突破了,就买上边说的那些书,结合着看,理解着看。等这些书全都学完,你就和大学本科毕业的计算机专业的学生水平差不多了!如果在考虑到学生都不太好好学习,掌握的不如你扎实的话,你其实已经比他们强了。

其他回答

有计算机基础那就没问题的   编程思想是在学习编程的过程中养成的,只要你想学了就应该坚持,买点相关的书籍看看基础知识,在闲暇的时候自己写点东西,慢慢的学习积累基础知识。等你觉得差不多了可以选择自学也可以学则培训如果你现在报班学习的话,怕你跟不上先给自己充点电啊,相信自己啊
http://www.gougou.com/search?search=java%e6%95%99%e7%a8%8b&id=2     另:   《java从入门到精通》视频教程由孙鑫老师录制(作者网站:http://www.sunxin.org),教程通俗易懂,内容全面,带领java初学者从入门到精通,快速掌握 java 编程语言。     说明:学习本套教程,您需要了解一些基本的编程开发基础知识,例如变量、语句、数组、循环等。这样学习本套视频,才会轻松而又快捷地掌握java开发。
看JDK 6 学习笔记,入门快,有条件的话直接看马士兵的视频教程
没有编程基础直接学JAVA可能会比较吃力,可以先去C,学好了再来学JAVA,不过我想问一下你现在多大了,做软件这行是很耗精力和体力的,而且也不只学好一个JAVA就行的,如果真的要做这行的要学的东西还很多呢。
想学还等什么啊,一个行业如果你不涉足进去,你永远也不可能了解它的。java本身就是一门语言,虽然你没有学习其它的编程语言也许在学习的过程中比较闲难点,但是想学同样是可以学好的。想学就从基础语法学习,慢慢的入门了以后的路就好走了,愿你成功!

相关问答

更多
  • 可以的 这个其实是程序代码的部分有英语要求,你用得多了也就知道是什么意思了。 在中育美佳是零基础开始教学的,没有电脑基础和英语基础都可以学习,现在还可以0学费入学呢
  • 首先,学什么,都不可能有捷径的,只能靠勤学苦练。 第一、如果您想学Java的话,我建议您可以先接触下C语言,C语言是编程语言的基础,编程语言也是相通的,熟悉了C语言后,再学其他的语言,也就相对容易些了。 第二、多上机练习,所谓:程序是敲出来的嘛。 第三、遇到问题,解决问题,不要退缩,要有毅力噢! 第四、多培养自己的逻辑思维能力,和团队协作的能力。 希望我的建议对您有所帮助!祝您早日成功!
  • 现在java相关的学习视频网上比较多,便比较全面的从基础到高级的并不多,想学习成套的java视频教程可以搜千锋。
  • 两种方式可以使windows和linux共存: 一是安装虚拟机,在windows中运行linux系统(或在linux中安装虚拟机运行linux系统). 二是安装双系统,(网上很多安装双系统的教程,很容易找到) 不过如果您没用用过linux,建议还是用虚拟机比较好一点,常用的虚拟机有:VMware player ,VMware workstation,网上也可以很简单的找到虚拟机安装linux的教程 在虚拟的环境 发布java系统 启动tomcat 是可以的
  • Java语言是一种优秀的高级编程语言,在使用各种不同解决方案进行简单试验的时候,允许我们够接近我们想要解决的问题。然而在平时的计算(和开发)中,很多情况下“迅速准备一个Java 程序”来执行任务不是不切实际就是太花时间。本文将您带入了 FESI(免费 EcmaScript解释程序)的秘密世界。在那里,用快速上手的方式展开 Java语言是一个标准,而非异议。 从概念到产品, Java 平台和 Java 编程语言都能提供其它开发环境中所没有的高级功能和全面的 API,从而推进软件产品的性能。这些功能和 API ...
  • http://www.verycd.com/topics/93279/ 这是下载地址,右键迅雷下。 下面是阅读顺序,很重要。不懂可以HI我 http://zhidao.baidu.com/question/134217117
  • 1. 李刚的《轻量级Jave EE企业应用实战 》专门讲Struts、Hibernate、spring框架。 2. Hibernate是做数据库方面的框架,spring是做有关AOP的框架。这三个框架是Java EE比较流行的框架。 3. Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并 ...
  • 学习程序的最好方式是参照源代码,先仿照,后创新,慢慢有积累了,就可以收发自由了。没关系的,慢慢来,不可能一步到位的。java确实很难学. 学习Java其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。每一种语言的程序设计思想大同小异,只是一些由语言特性的而带来的细微差别比如Java中的Interface,你几乎在以前的学习中没有碰到过。以下我仔细给你说几点: 1。我们必须明确一个大方向,也就是说现在面向对象的编程范畴。尽管人工智能曾经有 所浪潮(看看Borland为什么有Turb ...
  • java se 是JAVA基础,相当于入门一样 JAVA EE是JAVA的企业级开发 主要用于商业应用等方面 你也可以到 大家网 上找到你要学习的视频 比较强点 http://club.topsage.com/
  • Java Web编程 《O’reilly-Java Server Pages》- 强烈推荐* 《O’reilly-Java Servlet Programming》- 非常推荐* 《O’reilly-Jakarta Struts》- 推荐* (Java Web编程的一个MVC实现框架Struts的书) 四、EJB编程 《J2EE应用与BEA Weblogic Server》- 强烈推荐 《Mastering EJB 2.0》- 非常推荐* 《Enterprise Java Bean》- 推荐* 五: 强烈推 ...

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。