无法获取 Spring 数据 Mongo Rest 存储库的自定义行为

Trouble getting custom behavior for Spring Data Mongo Rest Repository

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

我参考了 Spring documentation 与将自定义行为添加到单个存储库相关的内容。

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

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

为了说明这一点,我整理了一些测试 classes。我的自定义界面如下所示:

public interface TestRepositoryCustom {
TestEntity getStuff();}

我的存储库如下所示:

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

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

实现 class 在这里:

public class TestRepositoryImpl implements TestRepositoryCustom {

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

查看搜索URL (http://localhost:9090/testEntities/search/) 时getStuff 方法不可用。 另外,当我去 URL ( http://localhost:9090/testEntities/search/getStuff ) 时,我收到了 404.

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

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

所以应用上下文似乎知道实现 class,但我就是不知道我做错了什么。

如有任何意见,我们将不胜感激

根据回答 Rest Repository not exposed

看来你不能对其余存储库执行此操作

如果您希望数据看起来像是来自 Mongo 存储库,您可以 return 将数据作为 PagedResource,并且应该 return 使其看起来相同.你可以看一个例子Returning Paged Resources

碰巧我 运行 陷入困境,因为我们有自己的 WebMVCConfig,它覆盖了 configureMessageConverter 部分,它没有正确 returning 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());
}

毕竟,它似乎 return 正确。

请尝试将您的 class "public class TestRepositoryImpl" 重命名为 "public class TestRepositoryCustomImpl" 以匹配自定义接口名称。