Spring 数据 REST、MVC QueryDSL 绑定 |模拟默认绑定

Spring Data REST, MVC QueryDSL bindings | simulate default bindings

我有启用了 Spring 数据 REST 的 Web 应用程序,遇到了 Querydsl web support

我还定义了存储库如下:

public interface OrderRepository extends PagingAndSortingRepository<Order, Long>, 
                                        QueryDslPredicateExecutor<Order> {}

和订单实体:

@Entity
@Table
public class Order extends AbstractEntity {

    private final Location location;
    private final LocalDateTime orderedDate;
    private Status status;

    @OrderColumn
    @Column(unique = true)
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    private final List<LineItem> lineItems = new ArrayList<>();

    public enum Status {
        PAYMENT_EXPECTED,
        PAID,
        PREPARING,
        READY,
        TAKEN;
    }
}

文档指出:

The default binding is as follows:

Object on simple properties as eq.

Object on collection like properties as contains.

Collection on simple properties as in.

如果我想模拟第一次绑定,我可以发出例如

curl -i -X GET -H "Content-Type:application/json" 
http://localhost:8080/api/orders?status=READY

然后服务器端将请求参数转换为querydsl谓词order.status = READY

我很难理解另外 2 个案例。

请求参数应该如何创建正确的谓词?

第二种类型的示例是:

http://localhost:8080/api/orders?status=PAID&status=READY

这类似于 JPQL in 子句。给我所有状态为 PAID READY

的订单

第三种类型的示例是:

http://localhost:8080/api/orders?lineItems=http://localhost:8080/api/lineItems/1

这类似于 JPQL contains 子句。给我所有 lineItems 包含指定对象的订单(资源的唯一 URI 指定为请求参数)。