【发布时间】:2021-10-24 07:15:48
【问题描述】:
我的 schema.grapqls 看起来像...
scalar BigDecimal
...
input TemplateLineItemInput {
partMasterId: String!
partMasterIdPath: String!
actionType: String!
actionQuantity: BigDecimal!
}
...
type Mutation {
...
createLineItem(id: ID! input: TemplateLineItemInput!): TemplateBom
}
我的 POJO 都是 Lombok-ie,在我尝试创建 input 之前一直运行良好。
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Builder
public class TemplateLineItemInput {
private final String partMasterId;
private final String partMasterIdPath;
private final String actionType;
private final BigDecimal actionQuantity;
}
我相信我有正确连接的突变...
@Component
public class TemplateBomDataWiring implements RuntimeWiringBuilderCustomizer {
private static final Logger LOG = LoggerFactory.getLogger(TemplateBomDataWiring.class);
private final TemplateBomService templateBomService;
public TemplateBomDataWiring(TemplateBomService templateBomService) {
this.templateBomService = templateBomService;
}
@Override
public void customize(RuntimeWiring.Builder builder) {
builder.scalar(Scalars.GraphQLBigDecimal);
builder.scalar(GraphQLDate);
builder.type("Query", typeWiring -> typeWiring.dataFetcher("templateBom", env -> {
final String id = env.getArgument("id");
return templateBomService.getTemplateBom(id);
}));
builder.type("Mutation", typeWiring -> typeWiring.dataFetcher("create", env -> {
final String partMasterId = env.getArgument("partMasterId");
return templateBomService.createTemplateBom(partMasterId);
}));
builder.type("Mutation", typeWiring -> typeWiring.dataFetcher("createLineItem", env -> {
final String id = env.getArgument("id");
final TemplateLineItemInput input = env.getArgument("input");
return templateBomService.createTemplateLineItem(id, input);
}));
}
但我无法在 GraphiQL 中解析查询。我没有堆栈跟踪服务器端,我只是在 GraphiQL UI 中得到这个......
{
"errors": [
{
"message": "class java.util.LinkedHashMap cannot be cast to class com.example.boa.domain.TemplateLineItemInput (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; com.example.boa.domain.TemplateLineItemInput is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @617a9621)",
"locations": [
{
"line": 42,
"column": 3
}
],
"path": [
"createLineItem"
],
"extensions": {
"classification": "INTERNAL_ERROR"
}
}
],
"data": {
"createLineItem": null
}
}
我在 https://www.graphql-java.com/documentation/v16/ 文档之外工作
如何让我的 input 类型映射到 graphql-java:16.2 上的 TemplateLineItemInput POJO?
【问题讨论】:
标签: java spring-boot graphql-java