我正在跟踪https://spring.io/guides/gs/accessing-data-rest/的spring数据,而我只使用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
我想知道如何返回所有记录(without pagination
),但不使用spring-boot-starter-web。我想使代码尽可能小。
我尝试了以下操作,但没有成功
@RepositoryRestResource(collectionResourceRel = "people" , path = "people")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> {
List<Person> findAllByLastName(@Param("name") String name);
default List<Person> findAll(){
Pageable pageable = null;
return (List<Person>) this.findAll(pageable);
};
}
我的意思是,如果我拥有完整的MVC,我可以做到,但是我希望将代码保持在最低限度。
答案 0 :(得分:0)
Spring Data REST本身就是一个Spring MVC应用程序,并且在 应该与现有的Spring MVC集成的方式 毫不费力的应用。的现有(或将来)层 服务可以与Spring Data REST一起运行,而仅需少量附加 工作。
如果使用的是当前版本的Spring Boot,则无需使用@RepositoryRestResource
标记存储库;一旦在您的路径中找到spring-data-rest依赖项,spring还将自动配置Spring Data Rest,下面您将找到具有最低配置的步骤:
在pom.xml中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
定义您的实体+存储库:
Order.java
@Entity(name = "SampleOrder")
@Data
public class Order {
@Id @GeneratedValue//
private Long id;
private String name;
}
OrderRepository.java
public interface OrderRepository extends CrudRepository<Order, Long> {
}
Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
测试您的API:
curl http://localhost:8080
< HTTP/1.1 200 OK
< Content-Type: application/hal+json
{ "_links" : {
"orders" : {
"href" : "http://localhost:8080/orders"
}
}
}
答案 1 :(得分:0)
如@ abdelghani-roussi所示,您可以使用CrudRepository
代替PagingAndSortingRepository
,例如:
public interface PersonRepository extends CrudRepository<Person, Long> {
List<Person> findAllByLastName(@Param("name") String name);
// don't need to define findAll(), it's defined by CrudRepository
}
,然后默认的findAll()
方法将返回未分页的List<Person>
。
注意:正如我在评论中提到的,通过包含对spring-boot-starter-data-rest
的依赖,您还也引入了Web依赖,所以您无法避免这种情况。