【问题标题】:Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z线程“主”java.lang.NoSuchMethodError 中的异常:com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
【发布时间】:2015-01-02 18:26:29
【问题描述】:

我需要将 json 转换为 pojo。我决定使用 jackson 并将 jackson-core-2.2.0.jar、jackson-databind-2.4.4.jar 和 jackson-annotations-2.1.2.jar 添加到我的项目的类路径中

我创建了以下Main 类:

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.DeserializationFeature;

public class Json {
private static String SRC= "";

  public static void main(String[] args) {

      AwardList awardList = null;
      ObjectMapper mapper = new ObjectMapper();

      try{
          awardList = (AwardList) mapper.readValue(new URL(SRC), AwardList.class);
      }catch (JsonGenerationException e){
          e.printStackTrace();
       } catch (JsonMappingException e){
          e.printStackTrace();
       } catch (IOException e){
          e.printStackTrace();
       }
       System.out.println(awardList);

  }
}

并关注AwardList 类:

public class AwardList {

    private Flights[] flights;
    private String[] connections;

    private SaverEconomy saverEconomy;
    private StandartEconomy standartEconomy;
    private SaverBusiness saverBusiness;
    private StandartFirst standartFirst;
    private SaverFirst saverFirst;


    public Flights[] getFlights() {
        return flights;
    }

    public void setFlights(Flights[] flights) {
        this.flights = flights;
    }

    public SaverEconomy getSaverEconomy() {
        return saverEconomy;
    }

    public void setSaverEconomy(SaverEconomy saverEconomy) {
        this.saverEconomy = saverEconomy;
    }

    public StandartEconomy getStandartEconomy() {
        return standartEconomy;
    }

    public void setStandartEconomy(StandartEconomy standartEconomy) {
        this.standartEconomy = standartEconomy;
    }

    public SaverBusiness getSaverBusiness() {
        return saverBusiness;
    }

    public void setSaverBusiness(SaverBusiness saverBusiness) {
        this.saverBusiness = saverBusiness;
    }

    public StandartFirst getStandartFirst() {
        return standartFirst;
    }

    public void setStandartFirst(StandartFirst standartFirst) {
        this.standartFirst = standartFirst;
    }

    public SaverFirst getSaverFirst() {
        return saverFirst;
    }

    public void setSaverFirst(SaverFirst saverFirst) {
        this.saverFirst = saverFirst;
    }

    public String[] getConnections() {
        return connections;
    }

    public void setConnections(String[] connections) {
        this.connections = connections;
    }
}

我想将 json 转换为 pojo 并保存在数据库中。我不断收到以下错误:

Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
  at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:457)
  at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:379)
  at Json.main(Json.java:72)

【问题讨论】:

  • 为什么你使用不同版本的杰克逊罐子?你有jackson-core、jackson-databind、jackson-annotations,但它们都有不同的版本?作为第一步,我建议使用相同的发行版本。仅供参考,今天发布了 2.5 版。
  • 您有另一个版本的杰克逊罐子,它们在这些罐子之前加载。检查其他版本并删除那些
  • 使用相同的版本也为我工作:

标签: java jackson


【解决方案1】:

我遇到了完全相同的问题。我使用 Maven 进行依赖管理,并且只像这样为 jackson-databind 模块添加了依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>

然后我通过这样做解决了它。我在 pom.xml 文件中明确添加了它的传递依赖项,并在 pom.xml 文件中为它们中的每一个提到了相同的 jackson.version,按照 here 的指导

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>${jackson.version}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson.version}</version>
</dependency>

【讨论】:

  • 这对我有用,但请注意,这个 jar 应该出现在类路径中,然后出现在带有早期版本 jackson 的 jar 之前。
  • 这对我有用..谢谢.. 我在上面添加了我的 jackson-databind 依赖项
  • 我对这三个版本都使用了 2.10 版本,我收到了这个错误。您建议使用哪个版本来解决此问题。
  • 如果有人在手动复制Tomcat的WEB-INF/lib下的三个jackson-*.jar-s后出现这个错误,请确保WEB-INF/classes/下没有旧的爆炸罐子com/fasterxml/*.
【解决方案2】:

我在 Google App Engine 上遇到了类似的问题。这是我修复它的方法。

首先我跑了:

mvn dependency:tree

查找谁在使用旧版本。然后我将其从有问题的依赖项中排除,如下所示:

<dependency>
    <groupId>com.google.appengine.tools</groupId>
    <artifactId>appengine-gcs-client</artifactId>
    <version>0.6</version>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

接下来我在我的 pom.xml 中添加了新版本的依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.8.7</version>
</dependency>

希望这可以帮助其他在这里绊倒的人。

【讨论】:

  • 如果你使用 gradle,它应该是这样的。实施(“com.google.api-client:google-api-client:1.23.0”){排除组:'com.fasterxml.jackson.core',模块:'jackson-core'}
【解决方案3】:

我遇到了同样的问题。 jackson-version 2.6.3 和另一个依赖项(graphaware-framework-embedded)之间存在一些不兼容。

我可以通过简单地删除我自己的 pom 中对 jackson 的依赖项 来解决这个问题,然后让其他依赖项加载它需要的任何 jackson-version。

【讨论】:

    【解决方案4】:

    我刚才在将我的项目从 spring 3 升级到 4.1.6 时遇到了同样的问题。

    一些背景资料供参考,以防万一它可以帮助遇到同样问题的人===> 首先,它提示我 mappingJacksonconverter 与 mappingJackson2converter 的错误,因为前者在 spring 4 中不再存在。一旦我在代码中更改了这些引用,我的调度程序 servlet 遇到了问题,因为它具有来自 spring 3 支持的 xsd 定义。更正后,我旅程的最后一步就是你们都面临的这个错误。

    我的解决方案: 我有以下 jar 的旧版本: 杰克逊注解, 杰克逊核心, 杰克逊数据绑定, 杰克逊核心asl, jackson-mapper-asl

    我将前 3 个 jar 升级到 2.10.0.pr1 版本,最后 2 个升级到 1.9.13 版本。

    我还有一个更旧的 jar,即 com.fasterxml.jackson.core.jar,我也必须删除它。无论如何,正如错误所暗示的,这是不匹配的关键原因(就像托比亚斯在我之前的评论中所说的那样)

    从这个特定问题的角度来看,我认为只有最后一段很重要,但我希望我对导致这方面问题的叙述可以帮助某人节省 4-5 小时 :) 干杯,伙计们!

    【讨论】:

      【解决方案5】:

      截至目前最新的redisson

      <dependency>
          <groupId>org.redisson</groupId>
          <artifactId>redisson</artifactId>
          <version>3.13.4</version>
      </dependency>
      

      我的最新 Jackson jackson.version 属性是 2.11.2

          <!-- faster JSON -->
          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-databind</artifactId>
              <version>${jackson.version}</version>
          </dependency>
          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-annotations</artifactId>
              <version>${jackson.version}</version>
          </dependency>
          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-core</artifactId>
              <version>${jackson.version}</version>
          </dependency>
      

      更新 Eclipse 引用,没有此运行器配置正在访问杰克逊项目的早期版本。

      eclipse:eclipse -U
      

      【讨论】:

        【解决方案6】:

        对我来说,我将版本更新为最近发布的版本,即 2.12.4,它运行良好。

        注意:我在 eclipse 中一个较大项目的构建路径中使用了另一个项目。 jackson 更新是在较小项目的 pom.xml 文件中完成的。

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        • 我从Jackson2.11.4升级到版本2.12.4,映射错误已修复。
        猜你喜欢
        • 2016-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-18
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多