Skip to content

ResponseProjection fields with reserved names have uppercase initial letter in final JSON #237

@Onmar

Description

@Onmar

Issue Description

I am currently writing a client for an API which has a response field called "native".
This is a reserved name in Java, and the codegen renames all methods with uppercase first letters (Which is great).

However, when creating a ResponseProjection with said field, the fieldname also has an uppercase first letter.
This breaks when actually executing since the field has the wrong name.

When changing the name in the GraphQLResponseField constructor to a lowercase first letter everything works.
(No change to method names etc.)

Steps to Reproduce

Generate client code for a type which contains a reserved name:

type MediaTitle {
  native(stylised: Boolean): String
}

Expected Result

Uppercase Method names and lowercase name in GraphQLResponseField Constructor.

public MediaTitleResponseProjection Native() {
        return Native((String)null);
    }

    public MediaTitleResponseProjection Native(String alias) {
        fields.add(new GraphQLResponseField("native").alias(alias));
        return this;
    }

    public MediaTitleResponseProjection Native(MediaTitleNativeParametrizedInput input) {
        return Native(null, input);
    }

    public MediaTitleResponseProjection Native(String alias, MediaTitleNativeParametrizedInput input) {
        fields.add(new GraphQLResponseField("native").alias(alias).parameters(input));
        return this;
    }

Actual Result

Uppercase Method names and uppercase name in GraphQLResponseField Constructor.

public MediaTitleResponseProjection Native() {
        return Native((String)null);
    }

    public MediaTitleResponseProjection Native(String alias) {
        fields.add(new GraphQLResponseField("Native").alias(alias));
        return this;
    }

    public MediaTitleResponseProjection Native(MediaTitleNativeParametrizedInput input) {
        return Native(null, input);
    }

    public MediaTitleResponseProjection Native(String alias, MediaTitleNativeParametrizedInput input) {
        fields.add(new GraphQLResponseField("Native").alias(alias).parameters(input));
        return this;
    }

Your Environment and Setup

  • graphql-java-codegen: 2.2.0
  • Build tool: Maven
  • Java tool: Oracle 8u241
<configuration>
  <graphqlSchemaPaths>
    <graphqlSchemaPath>${project.basedir}/src/main/resources/schema.graphql</graphqlSchemaPath>
  </graphqlSchemaPaths>
  <outputDir>${project.build.directory}/generated-sources/client</outputDir>
  <modelPackageName>(...).graphql.model</modelPackageName>
  <customTypesMapping>
    <CustomDate>(...).graphql.CustomDate</CustomDate>
    <CountryCode>com.neovisionaries.i18n.CountryCode</CountryCode>
  </customTypesMapping>
  <generateClient>true</generateClient>
  <generateApis>false</generateApis>
  <generateExtensionFieldsResolvers>false</generateExtensionFieldsResolvers>
  <generateParameterizedFieldsResolvers>false</generateParameterizedFieldsResolvers>
  <generateBuilder>true</generateBuilder>
  <generateEqualsAndHashCode>true</generateEqualsAndHashCode>
  <generateToString>true</generateToString>
</configuration>

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions