在 graphql-spqr 中以 Double 值对 NaN 建模
Posted
技术标签:
【中文标题】在 graphql-spqr 中以 Double 值对 NaN 建模【英文标题】:Model NaN in a Double value in graphql-spqr 【发布时间】:2020-01-05 13:36:16 【问题描述】:在Graphql 和JSON 中都没有表示NaN 和INFINITY 的标准。
在 javascript 中,JSON.stringify(0/0)
和 JSON.stringify(1/0)
只会返回字符串 null
。
当我提供支持 Java 的 GraphQL 端点时,它几乎不会造成任何麻烦。我的值可以是 Java 中任何有效的 Double
。
@GraphQLQuery
private Double precentage;
我几乎没有解决方法,我可以在我正在做的设置器中对其进行修补。 只是想知道是否有事实上的标准可以更好地处理它。
【问题讨论】:
我没有使用 Java 实现,但我想您应该能够通过创建GraphQLScalarType
类的实例来创建自定义标量类型,如 here 所示。通过这种方式,您可以创建一个标量,该标量可以接受例如"NaN"
、“Infinity”和任何浮点值作为有效值。
【参考方案1】:
我在某个时候也在考虑这个问题......
目前的情况是Double
(Java 类型)被映射到 GraphQL 的Float
标量,它不能表示NaN
或无穷大。
你可以做的是实现你自己的标量(例如Double
)并决定如何处理这些特殊情况(使用现有的标量实现作为指导)。也许使用NaN
、+Infinity
、-Infinity
之类的字符串?最糟糕的是,无论您采用何种约定,客户端也需要了解它,因为 JSON 也没有这些值的表示形式。
一旦您有了满意的自定义标量,您就可以实现一个超级简单的TypeMapper
,它支持Double
(Java 类型)并返回这个新标量。
或者回答您最初的问题 - 不,不幸的是,在 graphql-java 或 SPQR 中还没有任何现成的东西。但我很高兴扩展 SPQR 的自定义标量来处理这个问题......如果你想出了一个好的策略,请联系我。
【讨论】:
以上是关于在 graphql-spqr 中以 Double 值对 NaN 建模的主要内容,如果未能解决你的问题,请参考以下文章
具有弹簧安全性的 JWT 身份验证 graphql-spqr
Code ::在Windows中以固定精度阻止printf double