【问题标题】:GraphQL extensions creating com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException in graphql-javaGraphQL 扩展在 graphql-java 中创建 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException
【发布时间】:2021-05-26 08:39:55
【问题描述】:

我们正在使用 GraphQL 中的 Shopify Admin API 来创建应用程序。我们这里是基于这个例子开发的——https://github.com/graphql-java-generator/GraphQL-Forum-Maven-Tutorial-client

我们使用 apollo (nodejs) 从 Shopify 下载了架构,POJO 文件是自动生成的。我们能够成功请求 Shopify Storefront API,但 Admin API 有一个额外的字段“extensions”,这会导致反序列化失败。

我们收到的错误:

Exception in thread "main" javax.ws.rs.client.ResponseProcessingException: 

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "extensions" (class com.graphql_java_generator.client.response.JsonResponseWrapper), not marked as ignorable (2 known properties: "data", "errors"])
 at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 387] (through reference chain: com.graphql_java_generator.client.response.JsonResponseWrapper["extensions"])
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:702)
    at org.glassfish.jersey.client.JerseyInvocation.lambda$invoke$1(JerseyInvocation.java:632)
    at org.glassfish.jersey.client.JerseyInvocation.call(JerseyInvocation.java:654)
    at org.glassfish.jersey.client.JerseyInvocation.lambda$runInScope$3(JerseyInvocation.java:648)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:205)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:390)
    at org.glassfish.jersey.client.JerseyInvocation.runInScope(JerseyInvocation.java:648)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:631)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:434)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:335)
    at com.graphql_java_generator.client.QueryExecutorImpl.execute(QueryExecutorImpl.java:142)
    at org.forum.client.util.QueryRootExecutor.shop(QueryRootExecutor.java:20303)
    at org.graphql_forum_sample.client.GraphQLClient.execPartialRequests(GraphQLClient.java:95)
    at org.graphql_forum_sample.client.Main.main(Main.java:19)
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "extensions" (class com.graphql_java_generator.client.response.JsonResponseWrapper), not marked as ignorable (2 known properties: "data", "errors"])
 at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 387] (through reference chain: com.graphql_java_generator.client.response.JsonResponseWrapper["extensions"])
    at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
    at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:855)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1212)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1604)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1582)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:299)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:156)
    at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:2042)
    at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1201)
    at org.glassfish.jersey.jackson.internal.jackson.jaxrs.base.ProviderBase.readFrom(ProviderBase.java:837)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:233)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:212)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:132)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1072)
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:885)
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:819)
    at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:298)
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:699)

我已尝试将@JsonIgnoreProperties(ignoreUnknown = true) 添加到 POJO 中,并将反序列化功能添加到对象映射器中:

ObjectMapper o = new ObjectMapper();
o.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
o.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
o.disable(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE);
o.disable(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES);
o.disable(DeserializationFeature.FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY);
o.disable(DeserializationFeature.FAIL_ON_UNRESOLVED_OBJECT_IDS);

有关如何在反序列化中包含或忽略扩展的任何帮助?谢谢!

【问题讨论】:

    标签: java graphql shopify-api


    【解决方案1】:

    此问题已通过最新版本的 graphql-java-generator(1.12.3 及更高版本)解决。感谢开发者,他们还在代码中包含了扩展节点并发布了它。

    【讨论】:

      【解决方案2】:

      如果您还没有尝试过,请考虑一下。

      o.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
      

      【讨论】:

        猜你喜欢
        • 2019-03-13
        • 2019-06-12
        • 2018-08-01
        • 2019-02-14
        • 1970-01-01
        • 2017-01-13
        • 2018-12-09
        • 2021-05-12
        • 2020-03-03
        相关资源
        最近更新 更多