我正在使用Spring Data Rest试验几行代码。我找不到任何通过REST发送一个简单的请求来计算特定实体的所有记录。
假设我有以下实体:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
应使用以下存储库访问:
import java.util.List;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> {
}
有没有办法知道REST在我的数据库中保存了多少Person
个实体,没有指定条件?
答案 0 :(得分:3)
另一种选择是引入自定义查询方法。这些方法通过REST数据存储库公开。
例如,使用JPA:
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> {
@Query("select count(p) from Person p")
Long findCount();
}
使用MongoDB:
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends MongoRepository<Person, Long> {
@Query(value = "{}", count = true)
Long findCount();
}
然后从休息中调用它,它只是/people/search/findCount
,它只返回正文中没有额外属性的数字,例如:
200 success
date: Wed, 09 May 2018 17:59:13 GMT
transfer-encoding: chunked
content-type: application/hal+json;charset=UTF-8
154
无需解析GET响应并不必要地获取记录。
答案 1 :(得分:2)
Spring Data REST serves只有标准的HTTP方法,如GET,POST,PUT,PATCH,DELETE等。
但是,如果您需要获取资源总数,例如,请发出GET请求并检查其页面阻止:
"page" : {
"size" : 5,
"totalElements" : 50,
"totalPages" : 10,
"number" : 1
}
<强>已更新强>
对于GET method on collection resources SDR,返回包含资源元素总数的可分页结果。 SDR会触发两个选择查询:一个用于页面上的元素,另一个用于所有元素的计数查询。
答案 2 :(得分:-1)
看起来CrudRepository的count()方法是你的候选人。根据javadoc:
/**
* Returns the number of entities available.
*
* @return the number of entities
*/
long count();