Springboot 2.2 и graphql RawClassRequiredForGraphQLMappingException: сущность не может быть сопоставлена ​​с типом GraphQL - PullRequest
0 голосов
/ 04 апреля 2019

Хорошо, я работаю над тестовым проектом с использованием Cassandra, GraphQL и Spring Boot 2.2.0.M1. У меня есть следующие зависимости в моем pom.xml

 <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-cassandra</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
    <dependency>
        <groupId>com.graphql-java</groupId>
        <artifactId>graphql-java-tools</artifactId>
        <version>4.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.graphql-java</groupId>
        <artifactId>graphql-spring-boot-starter</artifactId>
        <version>4.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.graphql-java</groupId>
        <artifactId>graphiql-spring-boot-starter</artifactId>
        <version>4.0.0</version>
    </dependency>
 </dependencies>

Ниже моя таблица в Кассандре после того, как я выполню DESC TABLE product

CREATE TABLE jerseys237.product (
 prod_id timeuuid PRIMARY KEY,
 available float,
 description text,
 discount float,
 league text,
 picture text,
 price float,
 team_country text,
 team_crest text,
 team_name text,
 team_region text,
 title text
)... 

Мой product.grapqls файл:

type Product { 
  prod_id: ID!
  available: Float
  description: String
  discount: Float
  league: String
  picture: String
  price: Float
  team_country: String
  team_crest: String
  team_name: String
  team_region: String
  title: String
}

type Query {  
 findAllProducts: [Product]  
 findProductByPrice(price: Float!): Product
 findProductByTitle(title: String!): Product
 countProducts: Long 
}  

type Mutation { 
 deleteProduct(prod_id: String!) : Boolean 
}

schema {
 query: Query
 mutation: Mutation   
}   

Также существует класс @Component public class Query implements GraphQLQueryResolver, который, похоже, не имеет проблем. И наконец у меня есть Product Class:

  @Data
  @NoArgsConstructor
  @AllArgsConstructor
  @Table 
  public class Product {

@PrimaryKey
private String prod_id;
private Float available;
private String description;
private Float discount;
private String league; 
private String picture; //  or  private Byte[] picture; ??
private Float price;
private String team_country;
private String team_crest;  
private String team_name;
private String team_region;
private String title;

public Product(Float available, String description, Float discount, String league, String picture, Float price, String team_country, String team_crest, String team_name, String team_region, String title) {
    this.prod_id = UUIDs.timeBased().toString(); // automatically generate timeuuid
    this.available = available;
    this.description = description;
    this.discount = discount;
    this.league = league;
    this.picture = picture;
    this.price = price;
    this.team_country = team_country;
    this.team_crest = team_crest;
    this.team_name = team_name;
    this.team_region = team_region;
    this.title = title;
  }  
 }

Как вы можете видеть, некоторые столбцы в пространстве ключей Cassandra (например, team_crest) должны иметь тип blob, но я не смог успешно сопоставить его с типом Java (но это другой вопрос). Таким образом, вот проблема, после изменения версий весенней загрузки и даже версий зависимостей, каждый раз, когда я запускаю приложение в своих сетевых компонентах, я получаю эту ошибку: - (

com.coxautodev.graphql.tools.TypeClassMatcher$RawClassRequiredForGraphQLMappingException: Type java.util.List<com.creatixxx.jersey.entities.Product> cannot be mapped to a GraphQL type! Since GraphQL-Java deals with erased types at runtime, only non-parameterized classes can represent a GraphQL type. This allows for reverse-lookup by java class in interfaces and union types

Я был в интернете последние 3 дня, но не смог найти решение или хотя бы учебник по GraphQl, Spring Boot и Cassandra. Пожалуйста, как я могу решить эту ошибку и заставить мое приложение работать. Мне действительно нужна помощь в этом. Спасибо заранее.

...