我正在尝试基于具有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,以及正确的代码应如何显示?
您需要一个类定义来挂起它@Import(其他在类上而不是在接口上的注释是多余的)。
@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 }