作者:jiuqiu | 来源:互联网 | 2022-12-09 11:24
在我们的GraphQL SpringBoot应用程序中,我们通过graphql-java-datetime成功地为LocalDateTime使用自定义标量实现
com.zhokhov.graphql
graphql-datetime-spring-boot-starter
1.2.0
com.graphql-java
graphql-spring-boot-starter
4.0.0
com.graphql-java
graphql-java-tools
4.3.0
只要我们在架构中仅使用它作为String,它就可以正常工作
scalar LocalDateTime
input AttendanceFilter {
# date format yyyy-MM-ddThh:mm:ss
fromDateTime: String
toDateTime: String
}
type Query {
attendanceList(filter: AttendanceFilter): [Attendance]
}
type Attendance {
date: LocalDateTime
}
我们也可以在Java解析器实现中使用Java类型的LocalDateTime
public List attendanceList(AttendanceFilter filter) {
LocalDateTime fromDateTime = filter.getFromDateTime;
LocalDateTime toDateTime = filter.getToDateTime;
return jpaAttendanceRepository.findByFromTimeAfterAndToTimeBefore(fromDateTime, toDateTime) }
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
public class AttendanceFilter {
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(pattern = "yyyy[-]MM[-]dd'T'HH[:]mm[:]ss")
private LocalDateTime fromDateTime;
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(pattern = "yyyy[-]MM[-]dd'T'HH[:]mm[:]ss")
private LocalDateTime toDateTime;
}
和GraphQL查询一样
query: {
attendanceList(filter: {fromDateTime: "2018-01-01T00:00:00",
toDateTime: "2018-06-01T23:59:59"}) { date }
}
工作得很好.
但是当我们想让它更具可读性时,而不是使用固定格式的String参数来使用LocalDateTime,即使在模式query.graphqls中也是如此.
input AttendanceFilter {
# date format yyyy-MM-ddThh:mm:ss
fromDateTime: LocalDateTime
toDateTime: LocalDateTime
}
反序列化似乎不能正常工作并返回错误
Exception while fetching data (/attendanceList) : Unexpected token (START_OBJECT), expected VALUE_STRING: Expected array or string. at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: ***.AttendanceFilter["fromDateTime"])
java.lang.IllegalArgumentException: Unexpected token (START_OBJECT), expected VALUE_STRING: Expected array or string. at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: ***.AttendanceFilter["fromDateTime"])
任何人都可以建议如何将AttendanceFilter对象中的JSON输入值转换为Java?非常感谢你提前