Skip to content

Support for integer-valued ID fields #244

@wabrit

Description

@wabrit

Currently (2.2.0) graphql-java does not appear to support integer-values for ID fields, either in query requests or in setting responses from data fetchers.

With the following schema query definition

final GraphQLObjectType queryType = newObject()
        .name("QueryType")
        .field(newFieldDefinition()
            .name("foo")
            .type(Foo)
            .argument(newArgument()
                .name("id")
                .description("The id of the foo")
                .type(new GraphQLNonNull(GraphQLID)))
            .dataFetcher(getFetcherForResource("foo")))
            .build(); 

The query

{ foo(id:"1") { id bar } }

works ok, but the query

{ foo(id:1) { id bar } }

fails with

{"errors":[{"validationErrorType":"WrongType","message":"Validation error of type WrongType: argument value IntValue{value=1} has wrong type","locations":[{"line":1,"column":10}],"errorType":"ValidationError"}],"data":null}

According to the GraphQL spec:

When expected as an input type, any string (such as "4") or integer (such as 4) input value should be coerced to ID as appropriate for the ID formats a given GraphQL server expects. Any other input value, including float input values (such as 4.0), must raise a query error indicating an incorrect type.

Also, if attempt to populate my response object to this query with a numeric value, it appears in the JSON result as null rather than a stringified form of that value. Again I believe the GraphQL spec states that servers should coerce results as appropriate before serializing ID values to JSON strings.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions