问题描述
我正在使用
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 成功响应并且不会抛出错误。