在 Return 上将 JsonObject 解构为 GraphQL 类型
Destructure a JsonObject to a GraphQL Type on Return
Vertx 是 json 成为第一个 class 公民的忠实粉丝,我也是它的忠实粉丝。我将 jsonb 列存储在 postgres 中作为我的主要数据存储机制。有点像这样:
CREATE TABLE game (
id varchar(16) not null default next_id() primary key,
data jsonb not null
);
然后我检索数据,处理 json 对象,然后 return 将其发送到浏览器。效果很好。
不过,我也在尝试使用 GraphQL,但似乎无法将 json 对象转换为 graphql 类型。例如我将此数据存储在数据库中:
{"name": "dominion", "createdBy": "Donald X. Vaccarino", "id": 233}
这是 graphql 类型:
type Game {
id: Long,
name: String,
createdBy: String,
createdAt: DateTime,
deletedAt: DateTime
}
并且这个 graphql 查询 return 是一个空项目列表,因为 json 数组中的 json 对象(游戏)没有被分解到 Game
类型:
type Query {
allGames(secureOnly: Boolean = false): [Game]
}
但如果我使用 json 作为查询结果类型,游戏列表会显示:
type Query {
allGames(secureOnly: Boolean = false): [JSON]
}
不过,问题在于 graphql 模式中现在没有类型信息。无法让客户端知道 JSON
对象
中有哪些属性
我的数据获取器有这种类型:
DataFetcher[CompletionStage[JsonArray]]
关于如何在代码中 return json 并让 graphql 响应 return 游戏类型有什么想法吗?
默认的 GraphQL 数据获取器是 PropertyDataFetcher
。
如果你想支持 Vert.x JsonObject
和 JsonArray
,你必须配置 GraphQL-Java 来使用 VertxPropertyDataFetcher:
RuntimeWiring.Builder builder = RuntimeWiring.newRuntimeWiring();
builder.wiringFactory(new WiringFactory() {
@Override
public DataFetcher<Object> getDefaultDataFetcher(FieldWiringEnvironment environment) {
return VertxPropertyDataFetcher.create(environment.getFieldDefinition().getName());
}
});
Vertx 是 json 成为第一个 class 公民的忠实粉丝,我也是它的忠实粉丝。我将 jsonb 列存储在 postgres 中作为我的主要数据存储机制。有点像这样:
CREATE TABLE game (
id varchar(16) not null default next_id() primary key,
data jsonb not null
);
然后我检索数据,处理 json 对象,然后 return 将其发送到浏览器。效果很好。
不过,我也在尝试使用 GraphQL,但似乎无法将 json 对象转换为 graphql 类型。例如我将此数据存储在数据库中:
{"name": "dominion", "createdBy": "Donald X. Vaccarino", "id": 233}
这是 graphql 类型:
type Game {
id: Long,
name: String,
createdBy: String,
createdAt: DateTime,
deletedAt: DateTime
}
并且这个 graphql 查询 return 是一个空项目列表,因为 json 数组中的 json 对象(游戏)没有被分解到 Game
类型:
type Query {
allGames(secureOnly: Boolean = false): [Game]
}
但如果我使用 json 作为查询结果类型,游戏列表会显示:
type Query {
allGames(secureOnly: Boolean = false): [JSON]
}
不过,问题在于 graphql 模式中现在没有类型信息。无法让客户端知道 JSON
对象
我的数据获取器有这种类型:
DataFetcher[CompletionStage[JsonArray]]
关于如何在代码中 return json 并让 graphql 响应 return 游戏类型有什么想法吗?
默认的 GraphQL 数据获取器是 PropertyDataFetcher
。
如果你想支持 Vert.x JsonObject
和 JsonArray
,你必须配置 GraphQL-Java 来使用 VertxPropertyDataFetcher:
RuntimeWiring.Builder builder = RuntimeWiring.newRuntimeWiring();
builder.wiringFactory(new WiringFactory() {
@Override
public DataFetcher<Object> getDefaultDataFetcher(FieldWiringEnvironment environment) {
return VertxPropertyDataFetcher.create(environment.getFieldDefinition().getName());
}
});