使用spring-data-rest返回所有结果

时间:2018-11-17 12:59:29

标签: java spring spring-boot

我正在跟踪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,我可以做到,但是我希望将代码保持在最低限度。

2 个答案:

答案 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依赖,所以您无法避免这种情况。