使用Spring Boot找不到Spring Data Rest Endpoint

时间:2016-06-23 01:57:12

标签: java spring rest spring-mvc spring-data-rest

我是第一次尝试Spring Data Rest,但我似乎无法在localhost:8080/books找到我的存储库端点有没有人看到我配置错误的内容?

申请类

@SpringBootApplication
@ComponentScan(basePackageClasses = {Book.class})
public class SpringDataMicroServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringDataMicroServiceApplication.class, args);
    }
}

图书实体

@lombok.Getter
@lombok.Setter
@lombok.RequiredArgsConstructor
@lombok.EqualsAndHashCode(of = "isbn")
@lombok.ToString(exclude="id")
@Entity
public class Book implements Serializable {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long id;

    private String isbn;

    private String title;

    private String author;

    private String description;
}

BookRepository

public interface BookRepository extends CrudRepository<Book, Long> {
}

Gradle Build文件

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'io.spring.gradle:dependency-management-plugin:0.5.4.RELEASE'
    }
}

apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'
apply plugin: 'idea'

dependencyManagement {
    imports {
        mavenBom 'io.spring.platform:platform-bom:2.0.5.RELEASE'
    }
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-aop')
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile('org.springframework.data:spring-data-rest-hal-browser')
    compile('org.projectlombok:lombok:1.16.6')
    compile('org.springframework.retry:spring-retry')
    compile('org.springframework.boot:spring-boot-starter-validation')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.boot:spring-boot-starter-ws')
    compile('org.springframework.boot:spring-boot-actuator')

    runtime('com.h2database:h2')

    testCompile('org.springframework.boot:spring-boot-starter-test') 
    testCompile('org.springframework.restdocs:spring-restdocs-mockmvc')
}

3 个答案:

答案 0 :(得分:4)

好的修复了我需要做的就是在我的主应用程序上添加一些注释进行扫描。我不得不告诉它找到实体和存储库,因为它们位于不同的包中。

@SpringBootApplication
@ComponentScan(basePackageClasses = {BookRepository.class})
@EntityScan(basePackageClasses = {Book.class})
@EnableJpaRepositories(basePackageClasses = {BookRepository.class})
public class SpringDataMicroServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringDataMicroServiceApplication.class, args);
    }
}

答案 1 :(得分:1)

在春季启动时,默认情况下您不需要执行@ComponentScan,@ EntityScan和@EnableJpaRepositories。将@RepositoryRestResource添加到您的存储库。除了@SpringBootApplication之外,从starter类中删除所有注释。 Spring启动会默认扫描所有包。然后,您将能够找到端点localhost:8080 / books。它没有为你工作,因为你专门扫描实体类。未扫描存储库。当您删除这些注释时,将扫描所有包,并且我们将创建存储库bean并且端点将可用。

如果您使用多个软件包,请确保将应用程序启动器保留在基础软件包中。例如:

editor_css

答案 2 :(得分:0)

您缺少一个资源控制器(@RestController),它将GET /books @RequestMapping("/books")的请求路由到将检索Book的Java方法例如,来自数据库的实体。

请参阅创建资源控制器 here for more details