1 回答
TA贡献1829条经验 获得超9个赞
ScalarStrategy不是实现您想要的目标的正确方法。当您想要更改 Java 类型映射到 GraphQL 的方式时,您通常会提供一个新的(或自定义一个现有的)TypeMapper.
查看现有的Date标量实现并以类似的方式实现您自己的标量实现。然后实现一个自定义,它总是简单地从和方法TypeMapper返回该标量的静态实例。toGraphQLTypetoGraphQLInputType
public class CustomTypeMapper implements TypeMapper {
private static final GraphQLScalarType GraphQLCustomDate = ...;
@Override
public GraphQLOutputType toGraphQLType(...) {
return GraphQLCustomDate;
}
@Override
public GraphQLInputType toGraphQLInputType(...) {
return GraphQLCustomDate;
}
@Override
public boolean supports(AnnotatedType type) {
return type.getType() == Date.class; // This mapper only deals with Date
}
}
要注册它,请致电generator.withTypeMappers(new CustomTypeMapper()。
也就是说,由于您只是想切断时间部分,因此最好LocalDate在此处使用。您可以通过注册一个(它只不过是一个映射器 + 转换器)使 SPQR 透明地做到这一点,TypeAdapter但是如上所述的简单映射器是您的情况下更有效的解决方案。如果您仍然决定采用适配器方式,则可以继承AbstractTypeAdapter<Date, LocalDate>并实现转换逻辑(应该是微不足道的)。通过generator.withTypeAdapters或通过将其分别注册为映射器和转换器进行注册。
添加回答
举报