【发布时间】:2017-07-18 12:54:47
【问题描述】:
我正在尝试使用 Spring 4 实现简单的 Web 服务。但我的 userService 似乎不起作用。
我有这样的配置:
public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{ PersistenceConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{
};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/api/*"};
}
}
像这样为我的内存 HSQLDB 配置持久性:
@Configuration
@ComponentScan("example.userService")
@PropertySource("classpath:hibernate.properties")
@EnableJpaRepositories("example.userService.repo")
public class PersistenceConfig {
@Autowired
Environment env;
@Bean
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
/* ... */
return entityManagerFactoryBean;
}
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("classpath:db/data.sql")
.build();
}
}
我有一个实体User。这是我的存储库:
@Repository
@RepositoryRestResource
public interface UserRepo extends CrudRepository<User, Long> {
List<User> findAll();
List<User> findByFirstName(@Param("firstName") String firstName);
}
而且我在 9999 端口上还有一个嵌入式码头来运行此服务。
当码头启动并且我去localhost:9999/api/users/或/user/1或类似的东西时,会发生错误404。 findByFirstName 方法也不起作用。
我认为这是因为 Servlet Dispatcher 不知道我暴露的存储库。但我也不知道如何“注册”它,因为我不想为它使用 controller。
我已经阅读了 spring 文档 here、here 和其他教程,但它们中的大多数都没有提供任何配置和描述只是工作的存储库。
关于我可以用它做什么以及什么会导致此问题的任何建议,因为控制台中没有显示任何内容,并且在编译时一切正常?
提前致谢!
UPD 1:
根据Accessing JPA Data with REST,我已将@RepositoryRestResource 添加到UesrRepo,但/api/users 仍然是404。
UPD 2: 我通过删除它的服务部分来简化问题,因为根据@Antoniossss 的评论它需要控制器。不是那么简单:我应该使用哪种配置(如果有)来公开存储库?
【问题讨论】:
-
我没有看到控制器实现 /users 或 /users/1 端点
-
@chomnoue 存储库不会被它们的名字暴露吗?我的意思是 UserRepository 应该在
/users或/user/公开(但直接公开它们不是最佳做法)。我想在没有控制器和服务的情况下使用它们。不可能吗? -
如果你想将存储库公开为休息资源,你需要@RepositoryRestResource。 spring.io/guides/gs/accessing-data-rest
-
@chomnoue
@RepositoryRestResource is not required for a repository to be exported根据您提交的指南。尽管如此,我已经添加了它(也编辑了问题),但它仍然是 404。顺便说一下,在这样的指南中,我没有看到 servlet 调度程序或任何配置文件中的任何配置更改。是否有任何更改或应该工作的捆绑只是Entity - Repo - PersistenceConfig? -
您是否也尝试过添加
@Repository注释?
标签: java spring spring-data-jpa spring-data-rest