Java Spring GraphQL中@QueryMapping和@SchemaMapping之间的数据共享



我有一个定义如下的模式:

enum CardType {
TYPE_1
TYPE_2
}
type Card {
id: ID!
}
type Order {
id: ID!
cards: [Card]!
}
input OrderFilter {
cardType: CardType
}
type Query {
getOrders(orderFilter: OrderFilter): [Order]
}

还有以下解析器:

@QueryMapping
public List<Order> getOrders(@Argument OrderFilter orderFilter) {
return this.orderService.get(orderFilter);
}
@SchemaMapping
public List<Card> cards(Order order) {
return this.cardService.getCards(order);
}

是否有一种方法可以让我从@SchemaMapping注释方法中获得OrderFilter参数?我想根据@QueryMapping注释方法的参数过滤该方法的结果。

我试图在@SchemaMapping注释方法中添加@Argument注释参数,但它不起作用。

我浏览了一下GraphQl文档,没有找到任何东西。

我最好的解决方案是创建一个"OrderGraphqlDTO"对象,该对象扩展了"订单"。对象。然后输入"OrderFilter"作为一个领域。我从图形模式中排除了该字段,因此它仍然只返回看起来像我们的订单对象的内容,但是现在可以在"卡片"中访问OrderFilter了。方法。

不是最好的方法,因为我找不到对这种情况的图形支持。不过至少看起来优雅了一点。

代码如下:

public class OrderGraphqlDTO extends Order
{
private OrderFilter orderFilter;

...
}
@QueryMapping
public List<OrderGraphqlDTO> getOrders(@Argument OrderFilter orderFilter) {
Order order = this.orderService.get(orderFilter);
return new OrderGraphqlDTO(order, orderFilter);
}
@SchemaMapping
public List<Card> cards(Order order) {
OrderGraphqlDTO orderQl = (OrderGraphqlDTO) order;
return this.cardService.getCards(orderQl);
}

DataFetchingEnvironmentclass可以用来读取过滤器的值。

@SchemaMapping
public List<Card> cards(DataFetchingEnvironment environment, Order order..) {
//your code here
...environment.getVariables().get("orderFilter")
//your code here
return this.cardService.getCards(order);
}

最新更新