繁体   English   中英

@DBRef与Spring Data Rest

[英]@DBRef with Spring Data Rest

我有一个名为VeiculoAgencia的课程,其中Veiculo具有作为参考的Agencia 当它不是列表时, 我可以传递 URI参考以及以下示例 但是我怎么办清单呢? 我很高兴有人能帮助我

没有getter和setter的实体

Veiculo

@Document
public class Veiculo{

    @Id
    private String id;

    @Indexed(unique = true)
    private String nome;
    private String tipo;
    @DBRef
    List<Contato> contatos;

    @DBRef
    List<Agencia> agencias;

}

通讯社

@Document
public class Agencia {

    @Id
    String id;
    @NotNull
    String nome;

    @CreatedBy
    String createdBy;

    @LastModifiedBy
    String lastModifiedBy;

    @CreatedDate
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    Date createdAt;

    @LastModifiedDate
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    Date lastModified;
}

Veiculo存储库

@RepositoryRestResource(collectionResourceRel = "veiculos", path = "veiculos")
public interface VeiculoRepository extends MongoRepository<Veiculo, String> {
    Veiculo save(Veiculo veiculo);
    List<Veiculo> findAll();
}

Agencia资料库

@RepositoryRestResource(collectionResourceRel = "agencias", path = "agencias")
public interface AgenciaRepository extends MongoRepository<Agencia, String> {

    Agencia save(Agencia t);
    List<Agencia> findAll();
    Agencia findByNome(@Param("nome") String nome);
}

卷曲

在/ api / agencias中发布

daniela@daniela-tars:~$ curl -i -X POST -H "Content-Type: application/json" -d '{"nome": "Agencia"}' localhost:8181/api/agencias
HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Last-Modified: Tue, 21 Jul 2015 01:58:40 GMT
Last-Modified: Tue, 21 Jul 2015 01:58:40 GMT
Location: http://localhost:8181/api/agencias/55ada75044ae41ca763aa3b4
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 21 Jul 2015 01:58:40 GMT

{
  "nome" : "Agencia",
  "createdBy" : "anonymousUser",
  "lastModifiedBy" : "anonymousUser",
  "createdAt" : "2015-07-21T01:58:40.021+0000",
  "lastModified" : "2015-07-21T01:58:40.021+0000",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8181/api/agencias/55ada75044ae41ca763aa3b4"
    }
  }
}

在/ api / veiculos中发布

daniela@daniela-tars:~$ curl -i -X POST -H "Content-Type: application/json" -d '{"nome": "Veiculo", "tipo": "Tipo"}' localhost:8181/api/veiculosHTTP/1.1 201 Created
Server: Apache-Coyote/1.1
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Location: http://localhost:8181/api/veiculos/55ada77344ae41ca763aa3b7
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 21 Jul 2015 01:59:15 GMT

{
  "nome" : "Veiculo",
  "tipo" : "Tipo",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8181/api/veiculos/55ada77344ae41ca763aa3b7"
    },
    "contatos" : {
      "href" : "http://localhost:8181/api/veiculos/55ada77344ae41ca763aa3b7/contatos"
    },
    "agencias" : {
      "href" : "http://localhost:8181/api/veiculos/55ada77344ae41ca763aa3b7/agencias"
    }
  }
}

关联URI

    daniela@daniela-tars:~$ curl -i -X PUT -H "Content-Type: text/uri-list" -d "http://localhost:8181/api/agencias/55ada75044ae41ca763aa3b4" http://localhost:8181/api/veiculos/55ada77344ae41ca763aa3b7/agencias
    HTTP/1.1 204 No Content
    Server: Apache-Coyote/1.1
    X-Content-Type-Options: nosniff
    X-XSS-Protection: 1; mode=block
    Cache-Control: no-cache, no-store, max-age=0, must-revalidate
    Pragma: no-cache
    Expires: 0
    X-Frame-Options: DENY
    Date: Tue, 21 Jul 2015 02:00:13 GMT
    daniela@daniela-tars:~$ curl localhost:8181/api/veiculos
    {"timestamp":1437444045504,"status":500,"error":"Internal Server Error","exception":"org.springframework.dao.InvalidDataAccessResourceUsageException","message":"no db; nested exception is com.mongodb.MongoInternalException: no db","path":"/api/veiculos"}
daniela@daniela-tars:~$ curl localhost:8181/api/veiculos/55ada77344ae41ca763aa3b7
    {"timestamp":1437444071205,"status":500,"error":"Internal Server Error","exception":"org.springframework.dao.InvalidDataAccessResourceUsageException","message":"no db; nested exception is com.mongodb.MongoInternalException: no db","path":"/api/veiculos/55ada77344ae41ca763aa3b7"}

日志

org.springframework.dao.InvalidDataAccessResourceUsageException:无数据库; 嵌套异常是com.mongodb.MongoInternalException:org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java :2011)在org.springframework的org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1841)在org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1654)在org.springframework。 org.springframework.data.mongodb.repository.support.SimpleMongoRepository.findOne(SimpleMongoRepository.java:119)处的data.mongodb.core.MongoTemplate.findById(MongoTemplate.java:613)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) )的org处的sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)处的java.lang.reflect.Method.invoke(Method.java:497)处的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) .spri org.org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:437)上的ngframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:452) springorgwork.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:409)在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)在org.springframework.data.projection。在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)处的DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61)在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAmp207) .sun.proxy。$ Proxy71.findOne(来源不明),位于org.springframework.data.repository.support.CrudReposi org.Reference.org.Reference.org.Reference.org.Reference.org.Reference.org.Reference.org.Reference.org.Reference.org.Reference.org.References()上的toryInvoker.invokeFindOne(CrudRepositoryInvoker.java:91)位于org.springframework.Pro。 org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.createPropertyReference(RepositoryPropertyReferenceController.java:352)上的RepositoryPropertyReferenceController.java:437)位于sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)上的sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke处java.lang.reflect.Method.invoke(Method.java:497)处sun.reflect.DelegatingMethodAccessorImpl.java:43处的Java:62) (InvocableHandlerMethod.java:221)在org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest( org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:111)的org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod( org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:728)的org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter。 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)的org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)的org.springframework.web.servlet的java:85) org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:882)上的.FrameworkServlet.processRequest(FrameworkServlet.java:969)在javax.servlet.http.HttpServlet.service(HttpServlet.java) :651),位于org.apache.catalina.core.ApplicationFilterChain的javax.servlet.http.HttpServlet.service(HttpServlet.java:729)的org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)。 org.org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)的内部DoFilter(ApplicationFilterChain.java:291)org.org的org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)的.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)位于org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:316)在org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)在org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java :90),网址为org.springframework.secur org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)位于org.springframework.security.web.FilterChainProxy $ VirtualFilterChain处的ity.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)。 org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122)的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)的doFilter(FilterChainProxy.java:330)在org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)在org.springframework.security.web org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainP)上的.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:168) org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48)上的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)上的roxy.java:330) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)上的.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120)在org.springframework.security.web上org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java)的org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)的.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) :在org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)处的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)处的 g.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53)在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)在org.springframework.security。位于org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)处的web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)位于org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java: 176)位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)位于org.springframework.web.filter.CharacterEncodingFilter org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)的org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(A的.doFilterInternal(CharacterEncodingFilter.java:85) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)位于org.apache.catalina org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)的.core.StandardContextValve.invoke(StandardContextValve.java:106)在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142 )在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)在org.apache.catalina.coreves.ErrorReportValve.java:79)(在org.apache.catalina.connector.CoyoteAdapter。 org.apache.coyote.http11.service(CoyoteAdapter.java:518)在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:668)在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:668)组织中的.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1521) .apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1478)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)在java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617)在org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)在由:com。 mongodb.MongoInternalException:在sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)在com.mongodb.DBRefBase.fetch(DBRefBase.java:86)处没有数据库在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)机构org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:211)的java.lang.reflect.Method.invoke(Method.java:497)的.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) org.springframework.data.mongodb.core.convert.ReflectiveDBRefResolver.f上的springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:196) 在org.springframework.data.mongodb.core.convert.MappingMongoConverter.readRef(MappingMongoConverter.org)上的org.springframework.data.mongodb.core.convert.DefaultDbRefResolver.fetch(DefaultDbRefResolver.java:109)蚀刻(ReflectiveDBRefResolver.java:64) java:1214)org.springframework.data.mongodb.core.convert.MappingMongoConverter.readCollectionOrArray(MappingMongoConverter.java:904)at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1183)在org.springframework.data.mongodb.core.convert.MappingMongoConverter.access处$ 200(MappingMongoConverter.java:78)在org.springframework.data.mongodb.core.convert.MappingMongoConverter $ MongoDbPropertyValueProvider.getPropertyValue(MappingMongoConverter.java:1) org.springframework.data.mongodb.core.convert.DefaultDbRefResolverCallback.resolve(DefaultDbRefResolverCallback.java:5)上的org.springframework.data.mongodb.core.convert.MappingMongoConverter.getValueInternal(MappingMongoConverter.java:869) 9)在org.springframework.data.mongodb.core.convert.MappingMongoConverter $ 2.doWithAssociation(MappingMongoConverter.java:304)在org.springframework.data.mongodb.core.convert.DefaultDbRefResolver.resolveDbRef(DefaultDbRefResolver.java:90) org.springframework.data上的org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:339)在org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:287)处。 mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:231)位于org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:191)位于org.springframework.data.mongodb.core。在org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:78)处的convert.MappingMongoConverter.read(MappingMongoConverter.java:187)在org.springframework.data.mongodb.core.MongoTemplate $ ReadDbObjectCallback处。 doWith(MongoTemplate.java:2200) 在org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1837)...省略了88个常见框架

服务资源Veiculo实例公开链接的关联资源两个ContatoAgencia 您可以将媒体类型为text/uri-list有效负载发布到POST上, Veiculo分配引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM