Spring boot Spring Boot 2/GraphQL扩展标量不工作:异常;无法构造实例"&引用;无法反序列化";
我已经为graphqlapi(springboot2、graphqlsspringbootstarter、GraphiQL)建立了一个工作设置 然后,我尝试引入由graphql java扩展标量库提供的自定义标量(在本例中,是类型为java.time.LocalDate的成员的DateScalar): 我在模式中声明了自定义标量和类型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(否则服务器无法启动
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-很棒-谢谢!现在我在这里找到了更多关于此的信息,例如: