environment.getArgument can't cast to my own java object in graphql-java

Viewed 1949

I Can't cast input object to DTO because of below error ExecutionStrategy.resolveField() - Exception while fetching data java.lang.ClassCastException: java.util.LinkedHashMap incompatible with com.fathome.graphql.OffersDto

OffersDto inputObject = environment.getArgument("offersInput");

please let me know what's wrong in below code, thanks in advance.

package com.fathome.graphql;

import graphql.schema.*;

import static graphql.Scalars.*;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
import static graphql.schema.GraphQLInputObjectField.newInputObjectField;
import static graphql.schema.GraphQLInputObjectType.newInputObject;
import static graphql.schema.GraphQLList.list;
import static graphql.schema.GraphQLObjectType.newObject;


public class ManualGraphQLQuerySchema {


    public static GraphQLObjectType offersResponse = newObject()
            .name("OffersResponse")
            .field(newFieldDefinition()
                    .name("offerName")
                    .type(GraphQLString))
            .field(newFieldDefinition()
                    .name("offerId")
                    .type(GraphQLString))
            .build();

    public static GraphQLInputObjectType offersRequestType = GraphQLInputObjectType.newInputObject()
            .name("OffersDto")
            .field(newInputObjectField()
                    .name("offerName")
                    .type(GraphQLString))
            .field(newInputObjectField()
                    .name("offerId")
                    .type(GraphQLString))
            .build();

    public static GraphQLObjectType queryType = newObject()
            .name("QueryType")
            .field(newFieldDefinition()
                .name("offers")
                .type(offersResponse)
                .argument(GraphQLArgument.newArgument()
                    .name("offersInput")
                    .type(offersRequestType))
                .dataFetcher(new OffersFetcher()))
            .build();

}



package com.fathome.graphql;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "offerName",
        "offerId"

})
public class OffersDto {

    @JsonProperty("offerName")
    private String offerName;

    @JsonProperty("offerName")
    public String getOfferName() {
        return offerName;
    }

    @JsonProperty("offerName")
    public void setOfferName(String offerName) {
        this.offerName = offerName;
    }

    @JsonProperty("offerId")
    private String offerId;

    @JsonProperty("offerId")
    public String getOfferId() {
        return offerId;
    }

    @JsonProperty("offerId")
    public void setOfferId(String offerId) {
        this.offerId = offerId;
    }
}




package com.fathome.graphql;

import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;

public class OffersFetcher implements DataFetcher<OffersDto> {

    @Override
    public OffersDto get(DataFetchingEnvironment environment) {

        //Can't cast input object DTO this is error in below line
        //ExecutionStrategy.resolveField() - Exception while fetching data
        //java.lang.ClassCastException: java.util.LinkedHashMap incompatible with com.fathome.graphql.OffersDto
        OffersDto inputObject = environment.getArgument("offersInput");
       //calling service to get offerdetails using inputObject
        //for testing not calling service just returning mock object.
        OffersDto offersDto = new OffersDto();
        offersDto.setOfferName("123");
        offersDto.setOfferId("456");

        return offersDto;

    }
}

In below reference link similar to my code working fine.

Episode episode = environment.getArgument("episode"); ReviewInput review = environment.getArgument("review");

http://graphql-java.readthedocs.io/en/latest/execution.html

1 Answers
Related