我正在将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!
...
所以看起来应用程序上下文知道实现类,但我无法弄清楚我做错了什么。
任何输入都将不胜感激
答案 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”以匹配自定义接口名称。