因此,我已经使用标准的Spring Data JPA接口(扩展了PagingAndSortingRepository)来实现此目的,以便实现REST API的分页和排序。问题是,现在我想实现同样的目的,但是现在仅使用原始的JPA,到目前为止,我设法使我的API分页,但排序根本不起作用。每当我尝试设置参数(使用pageable.getSort()从可分页对象中设置)时,它都会以查询错误结尾(如果我只是将字符串作为参数(如“名称”)发送或仅发送了排序对象,它就会显示错误)。
这是一些代码:
我的回购实现:
@Override
public List<Project> findByAll(Pageable pageable) {
Query query = em.createQuery("SELECT project FROM Project project ORDER BY :sort");
query.setParameter("sort", pageable.getSort());
query.setMaxResults(pageable.getPageSize());
query.setFirstResult(pageable.getPageSize() * pageable.getPageNumber());
return query.getResultList();
}
Run Code Online (Sandbox Code Playgroud)
我的服务:
@Override
public Page<Project> findAll(Pageable pageable) {
objects = Lists.newArrayList(repository.findByAll(pageable));
PageImpl<Project> pages= new PageImpl<Project>(objects, pageable, repository.count());
return pages;
}
Run Code Online (Sandbox Code Playgroud)
需要明确的是,我正在通过URI填充Pageable对象,并且可以从控制台中说它实际上是在获取数据,因此我认为问题出在存储库上。
编辑:这是我将setParameter(“ sort”,...)替换为硬编码字符串又称为query.setParameter(“ sort”,“ name”)时遇到的错误:
java.lang.NumberFormatException: For input string: "name"
Run Code Online (Sandbox Code Playgroud)
而且我认为该方法也应该代表字符串。如果我使用query.setParameter(“ sort”,pageable.getSort()),则错误是相同的。
我一直在开发一个云应用程序来处理 Spring Cloud 等问题。现在我被困在尝试使用 RestTemplate API 向 Spring Data Rest 后端发送 POST 或 PUT 请求,但我尝试的一切都以错误结束:HttpMessageNotReadableException:无法从 START_OBJECT 令牌中反序列化 java.lang.String 的实例,HttpMessageNotReadableException : 无法读取文档: 无法从 START_ARRAY 令牌中反序列化 java.lang.String 的实例,...来自内容类型为 application/xml;charset=UTF-8! 的请求,错误 400 null...你说出它的名字. 经过研究,我发现使用 RestTemplate(如果我没记错的话,级别 3 JSON 超媒体)实际上很难使用 HAL JSON,但我想知道这是否可能。
我想看看 RestTemplate 将 POST 和 PUT 发送到 Spring Data Rest 后端的一些工作(如果可能的话,请详细说明)示例。
编辑:我尝试过 postForEntity、postForLocation、exchange,但它以不同类型的错误结束。这些是我尝试过的一些片段(还有更多,只是我处理了它们)。
我的实体:
@Entity
public class Account implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@NotNull
@NotEmpty
private String username; …Run Code Online (Sandbox Code Playgroud)