Как мне создать ссылку в firebase с использованием Java native SDK

#java #firebase #google-cloud-firestore

#java #firebase #google-cloud-firestore

Вопрос:

Я пытаюсь создать ссылку внутри моей firebase, используя Java native SDK. Кто-нибудь знает, как это сделать?

https://i.stack.imgur.com/KjOiM.png

Это то, что я сейчас пробовал: во-первых, у меня есть этот класс. Атрибут, который должен быть ссылкой, является soat .

 public class Car {
    private String plate;
    private String model;
    private long km;
    private boolean available;
    private DocumentReference soat; 
}
  

Это код, который я использую для сохранения документа в Firestore :

 public void save(Car car) {
    Map<String, Object> data = new HashMap<>();
    DocumentReference soatRef = fb.getFirestore().collection("SOATS").document(car.getPlate());
    data.put("plate", car.getPlate() );
    data.put("model", car.getModel());
    data.put("km", car.getKm());
    data.put("available", car.isAvailable());
    data.put("soat", soatRef);
    fb.getFirestore().collection("Cars").document(car.getPlate()).set(data);
}
  

Это код, который я использую для чтения объектов из Firestore :

 public List<Car> findAll() {
    List<Car> empList = new ArrayList<Car>();
    CollectionReference car = fb.getFirestore().collection("Cars");
    ApiFuture<QuerySnapshot> querySnapshot = car.get();
    try {
        for (DocumentSnapshot doc : querySnapshot.get().getDocuments()) {
            Car emp = doc.toObject(Car.class);
            empList.add(emp);
        }
    } catch (Exception e) {
         e.printStackTrace();
    }
    return empList;
}
  

Но у меня появляется это исключение:

 There was an unexpected error (type=Internal Server Error, status=500).
'com.google.common.util.concurrent.ListenableFuture com.google.common.util.concurrent.Futures.transform(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)'
java.lang.NoSuchMethodError: 'com.google.common.util.concurrent.ListenableFuture com.google.common.util.concurrent.Futures.transform(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)'
    at com.google.api.core.ApiFutures.transform(ApiFutures.java:99)
    at com.google.api.gax.paging.AbstractPage.createPageAsync(AbstractPage.java:66)
    at com.google.cloud.firestore.v1beta1.FirestoreClient$ListCollectionIdsPage.createPageAsync(FirestoreClient.java:1308)
    at com.google.cloud.firestore.v1beta1.FirestoreClient$ListCollectionIdsPagedResponse.createAsync(FirestoreClient.java:1267)
    at com.google.cloud.firestore.v1beta1.stub.FirestoreStubSettings$4.getFuturePagedResponse(FirestoreStubSettings.java:387)
    at com.google.cloud.firestore.v1beta1.stub.FirestoreStubSettings$4.getFuturePagedResponse(FirestoreStubSettings.java:378)
    at com.google.api.gax.rpc.PagedCallable.futureCall(PagedCallable.java:63)
    at com.google.api.gax.rpc.UnaryCallable$1.futureCall(UnaryCallable.java:126)
    at com.google.api.gax.rpc.UnaryCallable.futureCall(UnaryCallable.java:87)
    at com.google.cloud.firestore.FirestoreImpl.sendRequest(FirestoreImpl.java:330)
    at com.google.cloud.firestore.DocumentReference.getCollections(DocumentReference.java:364)
    at com.google.cloud.firestore.FirestoreImpl.getCollections(FirestoreImpl.java:112)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:689)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119)
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79)
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
    at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1516)
    at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1006)
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:335)
    at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:287)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:181)
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:82)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:123)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:832)
  

Редактировать
Когда у меня нет атрибута soat в моей модели, я получаю обычный ответ от API.
ответ из api без объекта DocumentReference

Комментарии:

1. При переполнении стека не показывайте изображения текста. Скопируйте текст в вопрос, чтобы его было легко читать, копировать и искать.

2. спасибо, чувак, надеюсь, что теперь кто-то понимает это лучше!

3. Основываясь на полной трассировке стека (той, которую вы вставили как изображение, а затем удалили во время редактирования), я предполагаю, что у вас конфликт версий между библиотеками Google Guava и Google api-commons. Можете ли вы проверить, какие версии вы используете? Кроме того, вам pom.xml может быть полезно выяснить, что пошло не так.

4. я использую эту зависимость только в своем проекте для доступа к firestore <dependency> <groupId>com.google. firebase</groupId> <artifactId>firebase-admin</artifactId> <версия>6.0.0</версия> </ зависимость>