【问题标题】:spring data rest mongodb java.lang.IllegalArgumentException: PersistentEntity must not be nullspring data rest mongodb java.lang.IllegalArgumentException: PersistentEntity 不能为空
【发布时间】:2016-05-11 23:43:13
【问题描述】:

我正在尝试通过 SDR 访问 mongodb 集合。目前使用以下版本

    <spring.version>4.1.9.RELEASE</spring.version>
    <spring-data-rest>2.4.4.RELEASE</spring-data-rest>
    <spring-data-mongodb>1.8.4.RELEASE</spring-data-mongodb>

我的仓库看起来像

@RepositoryRestResource
@PreAuthorize("hasAuthority('ROLE_USER')")
public interface LinksRepository extends MongoRepository<Link, String> {
Page<Link> findAllByUsefulURLRegex(@Param("regex") String regex, Pageable p);

我的模型定义如下

@Document(collection = "links")
public class Link {
    public Link() {}
    @Id
    private String id;

当我点击http://localhost:9090/api/links 时,我得到以下异常

java.lang.IllegalArgumentException: PersistentEntity must not be null!
    at org.springframework.util.Assert.notNull(Assert.java:112)
    at org.springframework.data.rest.webmvc.PersistentEntityResource$Builder.<init>(PersistentEntityResource.java:139)
    at org.springframework.data.rest.webmvc.PersistentEntityResource$Builder.<init>(PersistentEntityResource.java:122)
    at org.springframework.data.rest.webmvc.PersistentEntityResource.build(PersistentEntityResource.java:114)
    at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.wrap(PersistentEntityResourceAssembler.java:102)
    at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.toResource(PersistentEntityResourceAssembler.java:83)
    at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.toResource(PersistentEntityResourceAssembler.java:45)
    at org.springframework.data.web.PagedResourcesAssembler.createResource(PagedResourcesAssembler.java:182)
    at org.springframework.data.web.PagedResourcesAssembler.toResource(PagedResourcesAssembler.java:115)
    at org.springframework.data.rest.webmvc.AbstractRepositoryRestController.entitiesToResources(AbstractRepositoryRestController.java:127)
    at org.springframework.data.rest.webmvc.AbstractRepositoryRestController.toResources(AbstractRepositoryRestController.java:88)
    at org.springframework.data.rest.webmvc.AbstractRepositoryRestController.toResource(AbstractRepositoryRestController.java:110)
    at org.springframework.data.rest.webmvc.RepositorySearchController.executeSearch(RepositorySearchController.java:185)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:775)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:856)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)

稍微挖掘一下,我发现 MongoMappingContext 没有应有的 Link 类(我猜)

我花了几个小时试图弄清楚但没有运气。我没有使用 spring boot,感觉可能是 ObjectMapper 的问题,但我不知道,我的域和设置很简单......非常感谢任何帮助。

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    在花费了 不公平 大量的时间来调试它之后,我设法通过以下配置使其工作,而我这边没有任何代码更改:

        <spring.version>4.1.8.RELEASE</spring.version>
        <spring-data-rest>2.3.2.RELEASE</spring-data-rest>
        <spring-data-mongodb>1.8.0.RELEASE</spring-data-mongodb>
        <spring-data-jpa>1.9.0.RELEASE</spring-data-jpa>
    

    它可能与其他组合一起使用。请注意。

    【讨论】:

    • 您是否设法找出导致错误的原因?我正在使用 Spring Platform Athens-SR3 版本,并且遇到了与 MongoDB 和 PersistentEntityResourceAssembler 相同的问题。
    • 不,我没有抱歉。由于它有效,我停止摆弄这个配置。我敢肯定,一旦我升级或某些东西,我将不得不重新访问它......
    • FWIW,我在使用 MockMvc 的测试中遇到此错误,但在使用 Spring Boot 运行应用程序时没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多