当前位置: 首页 > 知识库问答 >
问题:

Spring数据 REST:忽略排序参数

田兴朝
2023-03-14

Spring Boot 2.0.1.RELEASE项目包含Spring Data JPA和Spring Data REST。似乎忽略了RESTendpoint中的<code>sort</code>参数(但在单元测试中使用相同的存储库方法)。存储库如下:

@RepositoryRestResource(collectionResourceRel = "orders", path = "orders")
public interface OrderRepository extends PagingAndSortingRepository<OrderEntity, Integer>, OrderRepositoryExtended {

@Query(value = "FROM OrderEntity a WHERE "
                + " (a.orderDateTime BETWEEN :dateFrom AND :dateTo) AND"
                + " ("
                + "  :searchTerm IS NULL OR"
                + "  (LOWER(a.customer.companyName) LIKE '%' || LOWER(:searchTerm) || '%') OR"
                + "  (LOWER(a.orderCode) LIKE '%' || LOWER(:searchTerm) || '%')"
                + " )"
)
Page<OrderEntity> findByOrderDateTimeBetweenAndSearchTerm(
        @RequestParam(name = "dateFrom")
        @Param("dateFrom")
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
            LocalDateTime dateFrom,

        @RequestParam(name = "dateTo")
        @Param("dateTo")
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
            LocalDateTime dateTo,

        @RequestParam(name = "searchTerm")
        @Param("searchTerm")
            String searchTerm,

        Pageable pageable);

}

实体(已编辑)如下:

@Entity
@Table(name = "T_ORDERS")
@Data @NoArgsConstructor
@Cacheable(false)
public class OrderEntity {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO, generator = "native")
    @GenericGenerator(name = "native", strategy = "native")
    @Column(name = "ID_ORDER")
    @JsonProperty("id_order")
    private int id;

    @Column(name = "DATE_ORDER")
    @JsonProperty("date_order")
    private LocalDateTime orderDateTime;

}

当我尝试使用导出的RESTendpoint调用它时,例如:

http://localhost:8080/api/v1/orders/search/findByOrderDateTimeBetweenAndSearchTerm?dateFrom=2018-01-01T00:00:00

正如您在生成的查询中看到的那样,排序参数被忽略(为清晰起见进行了编辑):

select orderentit0_.id_order as id_order1_21_
...
from t_orders orderentit0_ 
cross join t_customers customeren1_ 
where 
    orderentit0_.id_customer=customeren1_.id_customer and 
    (orderentit0_.date_order between ? and ?) and 
    (? is null or lower(customeren1_.company_name) like concat('%'
lower(?)
'%') or lower(orderentit0_.order_code) like concat('%'
lower(?)
'%')) limit ?

我已经尝试过简化WHERE表达式,删除类似的条件,但是没有成功。

谢谢!

共有1个答案

茅星华
2023-03-14

您酒店的“导出”名称为< code>date_order。它不仅应该在json请求中使用,还应该在请求参数中使用。

@Column(name = "DATE_ORDER")
@JsonProperty("date_order")
private LocalDateTime orderDateTime;

请尝试以下方式:

http://localhost:8080/api/v1/orders/search/findByOrderDateTimeBetweenAndSearchTerm?dateFrom=2018-01-01T00:00:00

(排序=日期_顺序)

 类似资料:
  • 我有一个存储库,其findAll方法用标记。我正在将生成的SQL打印到日志中,我可以看到当直接在Java中使用时,它会生成正确的连接选择(即)。但是当我通过REST调用它时,这种情况不会发生。我要么得到一个异常,BC。懒加载代理不能序列化,或者如果我添加杰克逊-数据库-hibernate5,我可以看到额外的查询。 我尝试在这里生成最小复制:https://github.com/cptwunderl

  • Spring Hateoas没有为以下请求映射创建适当的链接: 致电/会员/12345时,您希望返回: 但相反,它返回: 这是为什么?即使我使用@Request estParam,它也完全忽略了过滤器。在这件事上,任何建议都将受到赞赏。

  • 说我有下面的JPA方法: 用户通过输入字段和选择字段过滤这些对象的列表,从而调用此方法: 在这种情况下,如果用户不使用该字段进行搜索,则布尔值可以是true、false或null。看起来JPA实际上是在搜索一个空值,而我希望它忽略任何空值。我已经能够使用以下代码进行此组合搜索: 这是可行的,但显然,在一个有8个搜索选项的页面上,这将成为一场噩梦。字符串参数没有这个问题,因为当用户不选择过滤器时,它

  • 在我的申请中。属性,我已覆盖可分页参数的名称: 但是当我去Swagger UI检查我的Swagger留档时,没有使用新的name参数: 这是我的职能部门的签名: 如何将新名称绑定到文档?我可以更改默认描述吗? 谢谢你的回答!

  • 在MongoDB 2.6.5上使用mongo shell运行查询 问题是:。limit()似乎忽略了。排序()。 这是正常的行为吗?我不认为应该这样做,但我不确定。如果没有,有没有办法让它通过排序然后限制而不是限制然后排序来工作。 我正在运行以下查询 db。邮递查找({categories:{$in:[“101”]},位置:{$near:[1.310000,103.700000],$maxDist

  • 问题内容: 我刚刚从jQuery 1.3.2更新到1.4.3,并且在发出AJAX DELETE请求时看到了一些新行为。由于某种原因,在我的参数中传递的数据没有发送到服务器。例如: 最终向发送了DELETE请求,没有其他数据。但是,这种类型的调用可以很好地传递参数: 有没有其他人看到过类似的行为?有没有理由不再起作用(即:是设计使然,还是错误)?关于如何使其运作的任何建议? 此外,如果有人想知道为什