#spring-boot #cassandra #graphql-java
#весенняя загрузка #cassandra #graphql-java
Вопрос:
Я работаю над тестовым проектом с использованием 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>
Ниже приведена моя таблица в cassandra после выполнения 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 (но это другой вопрос). Итак, вот в чем проблема, после изменения версий spring boot и даже версий зависимостей, каждый раз, когда я запускаю приложение в моем netbeans, я получаю эту ошибку:
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
Как я могу устранить эту ошибку и заставить мое приложение работать?
Комментарии:
1. Вы, вероятно, следовали моему устаревшему руководству, поскольку у вас есть очень-очень старые версии всего. Я настоятельно рекомендую вам попробовать использовать graphql-java напрямую, следуя этому руководству. Вы также можете попробовать мой проект под названием GraphQL SPQR, если вас интересует подход «сначала код».
2. Спасибо за ответ. На самом деле я использовал последнюю версию всего, но все равно получил точно такую же ошибку, поэтому я понизил рейтинг в соответствии с этим другим руководством pluralsight.com/guides /…
3. Вот версия вашего руководства, которому я следовал: baeldung.com/spring-graphql
4. Точная ошибка, которую вы получаете, исходит от graphql-java-tools, который теперь находится под
com.graphql-java-kickstart
groupId и имеет версию 5.7.2. Сообщение об исключении является поддельным… у graphql-java нет проблем со списками или обобщениями. Вот почему я предлагаю использовать graphql-java напрямую. Официального руководства должно быть достаточно, чтобы вы начали.5. Большое вам спасибо @kaqqao, я действительно ценю