java - 如何将 graphql-java-extended-scalars DateTime 与 Jackson 一起使用
问题描述
我收到此错误
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `org.joda.time.DateTime` (although at least one Creator exists): no suitable creator method found to deserialize from Number value (1564191690.702000000)
at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: br.com.b2breservas.api.dto.FakeReservationPaginationInput["filter"]->br.com.b2breservas.api.dto.FakeReservationPaginationInputFilter["end"])
爪哇
import org.joda.time.DateTime;
public class FakeReservationPaginationInput {
FakeReservationPaginationInputFilter filter;
CheckoutPermissionInput permission;
}
public class FakeReservationPaginationInputFilter {
Integer limit;
List<String> statuses;
String query;
DateTime start;
DateTime end;
}
private final ObjectMapper objectMapper = new ObjectMapper()
.registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule());
// where the error pops up
FakeReservationPaginationInput input = objectMapper
.convertValue(dataFetchingEnvironment.getArgument("input"), FakeReservationPaginationInput.class);
我正在发送
{
...,
start: "2019-07-27T01:32:33.116Z",
end: "2019-07-27T11:32:33.116Z"
}
这基本上是
{
...,
start: moment().format(),
end: moment().format()
}
架构
scalar DateTime
input QueryReservationsInput {
filter: ReservationFilter
permission: CheckoutPermissionInput
}
input ReservationFilter {
query: String
statuses: [String]
limit: Int
end: DateTime!
start: DateTime!
}
input CheckoutPermissionInput {
type: String
ref_id: Int
ref_name: String
chain_id: Int
chain_name: String
}
解决方案
这个问题实际上与 GraphQL 无关......这是关于配置 Jackson 以反序列化 JodaTime 类型。尝试正确地隔离您的问题,因为这样可以消除很多噪音,并使问题更容易回答并且更广泛的受众可以访问。
无论如何,您正在注册JavaTimeModule
但您使用 JodaTime。你需要JodaModule
。
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>2.9.5</version>
</dependency>
接着
mapper.registerModule(new JodaModule());
推荐阅读
- sql - 如何从多个 XML 节点返回多行并结合 SQL 表?
- ansible - AWX 19.1.0 提供什么 Ansible 版本?
- email - woocommerce pdf 发票 - 通过预付余额和信用卡支付的订单未发送 pdf 发票
- ios - iOS 12 从资产加载图像返回 nil
- javascript - ChartJS 将两个具有一些相似性的数组组合在一个图中
- gcloud - 如何设置 gcloud 以使用来自身份联合的凭据与 OIDC
- python - Django / Python:ModuleNotFoundError:没有名为“d”的模块
- javascript - 将鼠标悬停在标签上以影响
JS中的元素 - email - 为什么此附件不会出现在所有电子邮件客户端中?
- c - C,
不链接