【问题标题】:Spring Data Rest Respository not found未找到 Spring Data Rest 存储库
【发布时间】: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


【解决方案1】:

您似乎错过了Spring data rest configuration 并且只有 MVC 配置。您需要将 bean RepositoryRestConfigurer 添加到您的配置中或扩展 RepositoryRestConfigurerAdapter。

【讨论】:

    猜你喜欢
    • 2015-03-01
    • 2017-04-30
    • 2017-10-18
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多