我们可以在使用@RepositoryRestResource的同时使用Spring Data REST创建自定义查询吗?

时间:2019-01-06 16:12:41

标签: java spring spring-boot spring-data-jpa spring-data-rest

我是Spring Boot的新手,我试图使用Spring-boot JPA创建一个简单的REST服务。首先,我使用简单的@Repository可以正常工作,我可以为类中定义的属性编写自定义Query方法。但是,当我使用@RepositoryRestResource时,无法创建自定义查询方法。关于主键和其他操作的基本发现正在发生,但是我无法创建任何自定义查询。

package com.example.demo.Model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Book {

    @Id
    @GeneratedValue
    int id;
    int isbn;
    String name;
    String author;
    double price;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getIsbn() {
        return isbn;
    }
    public void setIsbn(int isbn) {
        this.isbn = isbn;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }

}

这是存储库

package com.example.demo.repo;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import org.springframework.stereotype.Repository;

import com.example.demo.Model.Book;

@RepositoryRestResource(collectionResourceRel = "books", path = "books")
public interface BookRepo extends JpaRepository<Book, Integer> {

    //I want this query to work same as it does for primary Key id.
    public Book findByName(@Param("name") String name);

    //Same for this
    public Book findByIsbn(@Param("isbn") String isbn);    

}

由于我没有映射任何用于按名称搜索的url,因此我试图像这样localhost:8080/books/?name=java进行搜索吗? 对于上述url,它的行为类似于localhost:8080/books,而忽略后续部分,并提供所有书籍的详细信息。  我只想拥有两个类并执行所有基本的rest操作并创建自定义Query。

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要在yout uri中添加therm“搜索”和方法名称,如下所示:

localhost:8080 / books / search / findByName?name = java