无法获取Spring Data Mongo Rest存储库

时间:2016-01-29 18:49:15

标签: spring spring-data spring-data-mongodb spring-data-rest

我正在将Spring Boot(v1.3.1)与Spring Data Mongo(1.8.2)一起使用,并试图将聚合添加到我们现有的Mongo存储库之一,但是我在将它们全部协同工作时遇到了一些麻烦。

我引用了与将自定义行为添加到单个存储库相关的Spring documentation

在应用程序配置中,我们有以下内容:

@EnableMongoRepositories(basePackages = { "com.test" }, repositoryImplementationPostfix = "Impl")

为了说明这一点,我将一些测试类放在一起。我的自定义界面如下所示:

public interface TestRepositoryCustom {
TestEntity getStuff();}

我的存储库看起来像这样:

public interface TestRepository extends MongoRepository<TestEntity, String>, TestRepositoryCustom {

TestEntity findByName(@Param("name") String name);}

实施班在这里:

public class TestRepositoryImpl implements TestRepositoryCustom {

@Override
public TestEntity getStuff(){
    System.out.println("!!!!TESTOK!!!");
    return new TestEntity();
}}

当我查看搜索网址(http://localhost:9090/testEntities/search/)时,getStuff方法不可用。 此外,当我转到URL(http://localhost:9090/testEntities/search/getStuff)时,我得到了404。

出于绝望,我尝试更改repositoryImplementationPostfix,并注意到如果实现类后缀并且此值不同步,我会收到如下错误:

...
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property getStuff found for type TestEntity!
...

所以看起来应用程序上下文知道实现类,但我无法弄清楚我做错了什么。

任何输入都将不胜感激

2 个答案:

答案 0 :(得分:1)

根据答案Rest Repository not exposed,您似乎无法为其他存储库执行此操作。

如果您希望数据看起来像来自Mongo存储库,您可以将数据作为PagedResource返回,并且应该返回看起来相同。您可以看到示例Returning Paged Resources

碰巧我在这里碰到了一个gottcha,因为我们有自己的WebMVCConfig,它覆盖了configureMessageConverter部分,它没有正确返回PagedResources,所以为了解决这个问题,我不得不将halJacksonConverter添加到列表中,并使RestController方法生成hal + json。在我们的MVCConfig中,我添加了:

@Autowired
private TypeConstrainedMappingJackson2HttpMessageConverter halJacksonHttpMessageConverter;

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    List<MediaType> halMediaTypes = new ArrayList<MediaType>();
    halMediaTypes.add(RestMediaTypes.HAL_JSON);
    halJacksonHttpMessageConverter.setSupportedMediaTypes(halMediaTypes);
    converters.add(halJacksonHttpMessageConverter);
    converters.add(new DelimitedFileMessageConverter());
}

毕竟,它似乎正确地返回。

答案 1 :(得分:0)

请尝试将您的类“公共类TestRepositoryImpl”重命名为“公共类TestRepositoryCustomImpl”以匹配自定义接口名称。