我有一个定义如下的模式:
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);
}
DataFetchingEnvironment
class可以用来读取过滤器的值。
@SchemaMapping
public List<Card> cards(DataFetchingEnvironment environment, Order order..) {
//your code here
...environment.getVariables().get("orderFilter")
//your code here
return this.cardService.getCards(order);
}