Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson JSON对象反序列化中出现异常_Java_Json_Jackson_Jersey - Fatal编程技术网

Java Jackson JSON对象反序列化中出现异常

Java Jackson JSON对象反序列化中出现异常,java,json,jackson,jersey,Java,Json,Jackson,Jersey,我有一个Java Web应用程序,它使用Jersey和Jackson实现REST API,并根据tomcat官方Docker映像作为Docker映像进行部署。 有些类用作API主体参数,并组织为树层次结构,其中字符串类型字段用作类型鉴别器,用JsonTypeInfo注释声明。 我在两个不同的服务器上部署了两个相同的Docker映像,第一个是Ubuntu 16.04服务器,第二个是Centos 7.6。 现在,使用上述类作为body参数的方法在Ubuntu服务器上成功运行,而在Centos服务器上

我有一个Java Web应用程序,它使用Jersey和Jackson实现REST API,并根据tomcat官方Docker映像作为Docker映像进行部署。
有些类用作API主体参数,并组织为树层次结构,其中字符串类型字段用作类型鉴别器,用JsonTypeInfo注释声明。
我在两个不同的服务器上部署了两个相同的Docker映像,第一个是Ubuntu 16.04服务器,第二个是Centos 7.6。
现在,使用上述类作为body参数的方法在Ubuntu服务器上成功运行,而在Centos服务器上,如果传递的JSON对象的type字段不是第一个,则抛出以下异常:

java.lang.NoSuchMethodError:com.fasterxml.jackson.core.JsonStreamContext(Lcom/fasterxml/jackson/core/JsonStreamContext;)V 位于com.fasterxml.jackson.databind.util.TokenBufferReadContext。(TokenBufferReadContext.java:47)

这是从两台服务器接受的有效负载:

{
    "type": "query",
    "size": 10
    ...
}
当Centos服务器拒绝此选项时:

{
    "size": 10
    "type": "query",
    ...
}
我检查了两张图片中的jar,它们在相同的版本中完全相同,异常中提到的构造函数方法可以在jackson-core-2.9.3 jar中找到,周围没有其他版本的库。
如果type参数是JSON对象中的第一个参数,那么一切都正常,但不幸的是,这无法保证,因为API是从IOS应用程序调用的,该应用程序无法控制JSON对象编组中的字段顺序。 我无法理解操作系统如何影响容器化Java应用程序的执行,有人对我应该研究哪个方向有什么建议吗


编辑:问题已解决。jackson-core-2.9.3 jar包含在WEB应用程序的Tomcat lib文件夹和WEB-INF/lib文件夹中;由于Centos实例中的某些未知原因,这会导致“找不到方法”错误,我只是从WEB-INF/lib文件夹中删除了该文件,错误就消失了。调查是否可能是Java bug将是一件有趣的事情。

您能澄清一下这个问题吗?我的理解是,你向CentOs服务器发送的请求与向Ubuntu服务器发送的请求不同,还是说Ubuntu服务器在两个测试中都正常工作,但CentOs有一个测试失败?显示消息示例以进行说明可能也很有用。您确定Tomcat容器没有自带它自己的旧版本Jackson吗?@chrylis两个Docker映像是相同的,因此两个容器的Jackson库是相同的,但其中一个运行成功,另一个给出了错误。@andrew-g-za Ubuntu服务器在两个请求中的行为都正确,而Centos服务器只接受类型字段作为JSON中第一个字段的请求,在其他请求中失败cases@andrew-g-za我编辑了我的问题,添加了两个接受和拒绝有效载荷的示例。