Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
Spring boot Spring Boot 2/GraphQL扩展标量不工作:异常;无法构造实例"&引用;无法反序列化";_Spring Boot_Graphql - Fatal编程技术网

Spring boot Spring Boot 2/GraphQL扩展标量不工作:异常;无法构造实例"&引用;无法反序列化";

Spring boot Spring Boot 2/GraphQL扩展标量不工作:异常;无法构造实例"&引用;无法反序列化";,spring-boot,graphql,Spring Boot,Graphql,我已经为graphqlapi(springboot2、graphqlsspringbootstarter、GraphiQL)建立了一个工作设置 然后,我尝试引入由graphql java扩展标量库提供的自定义标量(在本例中,是类型为java.time.LocalDate的成员的DateScalar): 我在模式中声明了自定义标量和类型 scalar Date ... somedate: Date ... 我提供了GraphQLScalarType作为Springbean(否则服务器无法启动

我已经为graphqlapi(springboot2、graphqlsspringbootstarter、GraphiQL)建立了一个工作设置

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

我在模式中声明了自定义标量和类型

scalar Date
...
  somedate: Date
...
我提供了
GraphQLScalarType
作为Springbean(否则服务器无法启动):

@Bean
公共图形QLScalArtype日期(){
返回ExtendedScalars.Date;
}
我执行了一个带有日期的变异查询

突变{
创造(
一些东西:{
...
日期:“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
如下所示

@数据
实现GraphQLInputType的公共类{
...
私有localdatesomedate;
...
@凌驾
公共字符串getName(){
返回“某物”;
}
}

问题在于,要反序列化对象的类没有公共默认构造函数。

问题在于,要反序列化对象的类没有公共默认构造函数。

我认为,在为SchemaParseProptions提供了映射器it的调整配置之后作品:

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

GraphQL使用自己的objectmapper,因此必须在其上注册JavaTimeModule

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

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

GraphQL使用自己的objectmapper,因此必须在其上注册JavaTimeModule

多谢各位。我检查了这个,但是这个类有一个公共的无参数构造函数(通过Lombok annotation@Data)。(异常消息说:无法构造
java.time.LocalDate
的实例您也能提供您的类吗?我添加了一个类似该类的示例。您是否有公共setter?Jackson应该可以通过公共args构造函数或公共no args构造函数和公共setter访问您的类属性。公共no args构造函数和公共setters构造函数和setters/getter是由lombok@Data生成的。但我甚至尝试过不使用lombok,这无论如何都不会有什么不同。因此,是的,所有这些方法都存在。谢谢。我检查了这一点,但该类有一个公共的no-args构造函数(通过lombok annotation@Data)。(异常消息说:无法构造
java.time.LocalDate
的实例您也能提供您的类吗?我添加了一个类似该类的示例。您是否有公共setter?Jackson应该可以通过公共args构造函数或公共no args构造函数和公共setter访问您的类属性。公共no args构造函数和公共setters构造函数和setters/getter是由lombok@Data生成的。但我甚至尝试过不使用lombok,这应该不会有什么不同。所以,是的,所有这些方法都存在。Works-很棒-谢谢!现在我在这里找到了更多关于此的信息,例如:Works-很棒-谢谢!现在我在这里找到了更多关于此的信息,例如: