gpt4 book ai didi

spring-boot - Spring Boot 2/GraphQL 扩展标量不起作用 : Exception "Cannot construct instance" "cannot deserialize"

转载 作者:行者123 更新时间:2023-12-02 03:13:03 25 4
gpt4 key购买 nike

我已经有了 GraphQL API 的工作设置(Spring Boot 2、GraphQL Spring Boot Starter、GraphiQL)。

然后,我尝试引入库 graphql-java-extended-scalars 提供的自定义标量(在本例中,DateScalar 为类型为 的成员>java.time.LocalDate):

我在架构中声明了自定义标量和类型,

scalar Date
...
somedate: Date
...

我提供了 GraphQLScalarType 作为 Spring Bean(否则服务器将无法启动):

@Bean
public GraphQLScalarType date() {
return ExtendedScalars.Date;
}

我使用日期执行了突变查询。

mutation {
createSomething(
something:{
...
somedate: "2018-07-20",
...
}
)
}

但不幸的是我遇到了这个异常,

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.LocalDate` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

经过几个小时的研究,我不知道可能出了什么问题。尽管在配置中提供了标量,但似乎并未拾取标量。

GraphQLInputType 看起来像这样,

@Data
public class Something implements GraphQLInputType {

...
private LocalDate somedate;
...

@Override
public String getName() {
return "Something";
}
}

最佳答案

我认为在为 SchemaParserOptions 提供调整后的映射器配置后,它可以工作:

@Bean
public SchemaParserOptions schemaParserOptions(){
return SchemaParserOptions.newOptions().objectMapperConfigurer((mapper, context) -> {
mapper.registerModule(new JavaTimeModule());
}).build();
}

GraphQL 使用自己的对象映射器,因此您必须在其上注册 JavaTimeModule。

关于spring-boot - Spring Boot 2/GraphQL 扩展标量不起作用 : Exception "Cannot construct instance" "cannot deserialize",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57070610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com