如何使用Spring Boot GraphQL Kickstart的现成标量类型?找不到用于对象字段的类型名

问题描述

根据此博客:https://medium.com/supercharges-mobile-product-guide/graphql-server-using-spring-boot-part-ii-scalars-31505fe90c4c除了标准的GraphQL模式类型外,它们还捆绑在spring boot graphql kickstart的依赖项中:

scalar BigDecimal
scalar BigInteger
scalar Byte
scalar Char
scalar Short
scalar Long

我需要Long,因此将scalar Long添加到了我的模式文件。 我也将其添加到查询返回类型:


type CharacterOutput {
    id: ID!,name: String!
    age: Int!
    bloodline: BloodlineOutput
    villageId: ID!
    timestamp: Long!
}

但是我在这里如何在数据类中用作类型?

data class CharacterOutput(
    val id: String,val name: String,val age: Short,val bloodline: BloodlineOutput?,val villageId: String?,val timestamp: // << ?
)

有人可以告诉我在这里用什么吗?

解决方法

根据graphql-java-kickstart引发的异常,问题在于graphql-java-kickstart没有注册标量'Long'。

您可以按照本文档https://github.com/graphql-java-kickstart/graphql-spring-boot/wiki/Creating-a-custom-scalar-type创建自定义标量,或仅将Option Explicit Sub UpdateBookmarksFromExcelFile() Dim oXL As Excel.Application Dim oWB As Excel.Workbook Dim oSheet As Excel.Worksheet Dim oRng As Excel.Range Dim ExcelWasNotRunning As Boolean Dim WorkbookToWorkOn As String,msg1 As String Dim bkmk As String,txt As String,doc As Document,i As Long,j As Long,k As Long WorkbookToWorkOn = FileOpenDialogBox 'specify the workbook to work on On Error Resume Next Set oXL = GetObject(,"Excel.Application") On Error GoTo 0 If oXL Is Nothing Then ExcelWasNotRunning = True Set oXL = New Excel.Application End If On Error GoTo Err_Handler Set doc = ActiveDocument Set oWB = oXL.Workbooks.Open(FileName:=WorkbookToWorkOn) For Each oSheet In oWB.Worksheets If oSheet.Name = "Sheet1" Then For i = 1 To oSheet.Cells(oSheet.Rows.Count,"A").End(xlUp).Row bkmk = oSheet.Range("A" & i).Value 'value of the bookmark txt = oSheet.Range("B" & i).Value If Len(bkmk) > 0 Then If UpdateBookmark(doc,bkmk,txt) Then j = j + 1 'counts number of bookmarks updated Else k = k + 1 'gives total of bookmarks not found End If End If Next i End If Next oSheet oWB.Close False If ExcelWasNotRunning Then oXL.Quit MsgBox j & " Bookmarks updated," & k & " Bookmarks not found." Exit Sub Err_Handler: MsgBox WorkbookToWorkOn & " caused a problem. " & vbNewLine & Err.Description,vbCritical,_ "Error: " & Err.Number If ExcelWasNotRunning Then oXL.Quit End Sub 'replace any text in a bookmark in doc with the supplied text: return True if successful Function UpdateBookmark(doc As Document,BookmarkToUpdate As String,TextToUse As String) As Boolean Dim BMRange As Range If doc.Bookmarks.Exists(BookmarkToUpdate) Then Set BMRange = doc.Bookmarks(BookmarkToUpdate).Range BMRange.Text = TextToUse doc.Bookmarks.Add BookmarkToUpdate,BMRange UpdateBookmark = True Else UpdateBookmark = False 'no update End If End Function GraphQLScalarType连接到模式解析器中。

要创建自定义标量,您需要做两件事:

  1. GraphQLScalarType的实例,该实例将把graphql输入强制转换为Java表示形式。感谢graphql-java,这已经为Long实现了!我们将使用Scalars.GraphQLLong

  2. SchemaParser bean:graphql-java-kickstart使用默认的SchemaParser,可以将其重写以指定模式解析器选项,模式文件等。

    Scalars.GraphQLLong
,

配置 SchemaParser 的另一种方法是将您想要的标量注册为它们自己的 bean。

@Bean
public GraphQLScalarType longType() {
    return Scalars.GraphQLLong;
}

请注意,Java 特定的标量目前已被弃用,并说明它们将来会被移至单独的库中。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...