一尘不染

带有Spring-boot CLI的RepositoryRestResource

spring-boot

我正在尝试基于具有spring-boot和spring-data-
rest的JPA存储库实现一个简单的REST服务。(请参阅本教程)如果将下面的代码与gradle一起使用,则效果很好:

package ch.bfh.swos.bookapp

import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.context.annotation.*
import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration
import org.springframework.data.jpa.repository.config.EnableJpaRepositories
import org.springframework.context.annotation.Import
import org.springframework.data.rest.core.annotation.RepositoryRestResource
import org.springframework.data.repository.CrudRepository
import javax.persistence.*

@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableJpaRepositories
@Import(RepositoryRestMvcConfiguration.class)
class Application {
    static void main(String[] args) {
        SpringApplication.run Application, args
    }
}

@RepositoryRestResource(path = "authors")
interface AuthorRepository extends CrudRepository<Author, Long> {}

@Entity
class Author {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id
    private String firstname
    private String lastname
}

为了使事情更简单,我尝试了使用spring boot CLI(“ spring run”命令)使用相同的代码。

package ch.bfh.swos.bookapp

@Grab("spring-boot-starter-data-jpa")
@Grab("spring-boot-starter-data-rest")
@Grab("h2")

import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration
import org.springframework.data.jpa.repository.config.EnableJpaRepositories
import org.springframework.context.annotation.Import

import org.springframework.data.rest.core.annotation.RepositoryRestResource
import org.springframework.data.repository.CrudRepository

import javax.persistence.*

@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableJpaRepositories
@Import(RepositoryRestMvcConfiguration.class)
@RepositoryRestResource(path = "authors")
interface AuthorRepository extends CrudRepository<Author, Long> {}

@Entity
class Author {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id
    private String firstname
    private String lastname
}

不幸的是,这似乎不起作用。@RepositoryRestResource似乎不会像@RestController这样被自动识别。保留@Configuration部分,服务器将启动,但不会像使用gradle那样创建REST存储库。

有人知道是否可以使用spring-boot CLI创建RepositoryRestResource,以及正确的代码应如何显示?


阅读 299

收藏
2020-05-30

共1个答案

一尘不染

您需要一个类定义来挂起它@Import(其他在类上而不是在接口上的注释是多余的)。

更新: 并且
(更重要的是)除非它们实际上在文件中,否则Hibernate无法找到带注释的类(它注释性地分析字节码而不是类定义)。因此,您可以通过加扰并以这种方式运行它来使您的应用工作:

$ spring jar app.jar app.groovy
$ java -jar app.jar

这是该应用程序的较短版本,其工作方式与删除所有多余内容的方式相同:

package bookapp

@Grab("spring-boot-starter-data-jpa")
@Grab("spring-boot-starter-data-rest")
@Grab("h2")

import org.springframework.data.rest.core.annotation.RepositoryRestResource
import org.springframework.data.repository.CrudRepository

import javax.persistence.*

@Configuration
class App {}

@RepositoryRestResource(path = "authors")
interface AuthorRepository extends CrudRepository<Author, Long> {}

@Entity
class Author {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id
  String firstname
  String lastname
}
2020-05-30