我有一个要求,我必须接受对象列表。
变异类中的方法如下所示
@GraphQLMutation //1
public void ack(@GraphQLInputField List<PingEntity> pingEntityList) { //2
log.info("Handling ack calls.");
pingEntityRepository.savePingEntityList(pingEntityList);
}
PingEntity看起来像这样
@Data
//@Document(collection="pingdatastore")
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class PingEntity {
private String id;
@JsonProperty("action")
private String action;
@JsonProperty("message")
private String message;
@JsonProperty("timestamp")
private Long timestamp;
@JsonProperty("transactionId")
private String transactionId;
@JsonProperty("type")
private Integer type;
private String imei;
}
我的查询看起来像这样
mutation ack {
ack(pingEntityList: [{action: "KEEP-ALIVE2", message: "Keep alive message at regular intervals", timestamp: 1462747047}]) {
id
}
}
我得到了这样的错误:
"data": null,
"errors": [
{
"validationErrorType": "SubSelectionNotAllowed",
"message": "Validation error of type SubSelectionNotAllowed: Sub selection not allowed on leaf type Boolean",
"locations": [
{
"line": 2,
"column": 3
}
],
"errorType": "ValidationError"
}
]
}
我试着给出不同的注释。我无法解决这个问题..在这个问题上需要帮助
提前致谢:)
答案 0 :(得分:1)
问题似乎是,由于缺少更好的选项,您的ack
方法会返回void
,并将其映射到boolean
。由于boolean
是一个简单的标量,因此您无法从中选择任何内容,并且您尝试在查询中选择id
。
如果您更改了ack
方法以返回已保存的List<PingEntity>
,那么您将获得所需的行为。
但是......更重要的是,您正在使用哪个库,因为我在代码中看到的注释(@GraphQLInputField
)是来自graphql-java的 not (如graphql-java本身不提供注释),也不提供我认可的任何库。
它似乎来自一个非常古老且从未公开发布的graphql-spqr版本。如果确实如此,你绝对需要更新到最新版本,因为你似乎使用的版本充其量只是alpha质量。