graphql-java 整数作为输入

问题描述

我正在使用

compile group: 'com.graphql-java',name: 'graphql-java-tools',version: '5.2.4'

type Query {
sampleQuery(roll : Int!) : SampleResponse
}

当我尝试在 java 中如下所示访问它时

{sampleQuery(roll : ?2){samples{roll,name}}}

它给出 200 成功响应而不是 400 错误响应(因为我们试图在输入中传递无效值)。

这里,整数输入接受 ?2 or .2 or '2 or *2 or /2 等值...

它为什么接受它? 我该怎么做才能验证此输入并抛出错误提示无效输入参数? 这是 graphQl 实现本身的问题吗?

在控制台日志中我确实得到了

line 2:72 token recognition error at: '?'

但我也得到了正确的回应。理想情况下,这不应返回有效响应,因为输入本身无效。

主要问题是为什么graphQL不验证整数输入;而是解析输入(丢弃字符和数字)?它应该严格只接受整数值,而不接受其他任何值。

解决方法

因此,根据 graphql 语法,它允许(解析)附加有一些字符(标记)的整数值(如 ?,~`/*...等)但它不允许使用标点符号,如@、&、 $,!,{,],[,| 等。 因此,在这种情况下,会收到 200 成功响应并且不会抛出错误。

参考: https://spec.graphql.org/draft/