Не удалось десериализовать объект. Не удалось преобразовать значение типа com.google.cloud.Timestamp в строку (найдено в ⇐ JAVA
-
Гость
Не удалось десериализовать объект. Не удалось преобразовать значение типа com.google.cloud.Timestamp в строку (найдено в
Я пытаюсь прочитать данные из базы данных Firestore. одно из которых является значением Timestamp. Итак, у меня есть функция для преобразования в строку. преобразование работает для других временных меток, но не для этой. Я не знаю почему.
Вся ошибка вот в чем:
Servlet.service() для сервлета [dispatcherServlet] в контексте с путем [] выдал исключение [Ошибка обработки запроса: java.lang.RuntimeException: не удалось десериализовать объект. Не удалось преобразовать значение типа com.google.cloud.Timestamp в строку (найдено в поле «expiryDate»)] с основной причиной.
Вот модель
@Data @NoArgsConstructor @AllArgsConstructor Общественный класс Вакансии { @DocumentId частный @Nullable String jobId; частный заголовок строки; частные приложения List; частная струнная компания; описание частной строки; частное расположение строки; требования к частной строке; частные представления строк; частная отметка времени истечения срока действия; частная временная метка PostedAt; public void setExpiryDate(String expiryDate) выдает ParseException { this.expiryDate = Timestamp.fromProto(Timestamps.parse(expiryDate)); } public void setPostedAt(String PostedAt) выдает ParseException { this.postedAt = Timestamp.fromProto(Timestamps.parse(postedAt)); } } Вот контроллер
@RestController @RequestMapping("/api/jobs") @Tag(name="Работы", описание = "Получает информацию, связанную с вакансиями") общественный класс JobsController { // http://localhost:8080/api/jobs @Autowired частный JobsService jobsService; общественный JobsController (JobsService jobsService) { this.jobsService = jobsService; } @Operation(summary = «Получить список всех заданий», метод = «GET») @ApiResponses(значение = { @ApiResponse(responseCode = "200", описание = "Найдены вакансии"), @ApiResponse(responseCode = "500", описание = "невозможно получить задания", контент = @Content(mediaType = "application/json", схема = @Schema(реализация = ApiResponseFormat.class))) }) @GetMapping("/") // http://localhost:8080/api/jobs/ public ResponseEntity getAllJobs() { пытаться { List jobList = jobsService.getAllJobs(); если(!jobList.isEmpty()) return ResponseEntity.ok(new ApiResponseFormat(true, «Задания успешно получены», jobList, «500»); еще вернуть ResponseEntity.status(HttpStatus.NO_CONTENT) .body(новый ApiResponseFormat(true,null,null,null)); } catch (ExecutionException | InterruptedException e) { вернуть ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ApiResponseFormat(false, «Ошибка получения заданий», null, e.getMessage())); } } Вот сервис:
@Service общественный класс JobsService { частная пожарная лавка Firestore; общественный JobsService () { this.firestore = FirestoreClient.getFirestore(); } общественные вакансии documentSnapshotToJobs (DocumentSnapshot document) { если (document.exists()) { вернуть документ.toObject(Jobs.class); } вернуть ноль; } public List getAllJobs() выдает ExecutionException, InterruptedException { CollectionReference jobsCollection = firestore.collection("Работы"); ApiFuture будущее = jobsCollection.get(); List jobsList = новый ArrayList(); for (DocumentSnapshot document: Future.get().getDocuments()) { Вакансии jobs = documentSnapshotToJobs (документ); если (работы != ноль) { jobsList.add(вакансии); } } вернуть список вакансий; } Я использую Postman для изменения базы данных. Когда я пытаюсь выполнить запрос GET, он должен вернуть список всех заданий. Но я ничего не получаю. URL правильный, потому что я получаю сообщения об ошибках.
Скриншот базы данных Firestore
Я пытаюсь прочитать данные из базы данных Firestore. одно из которых является значением Timestamp. Итак, у меня есть функция для преобразования в строку. преобразование работает для других временных меток, но не для этой. Я не знаю почему.
Вся ошибка вот в чем:
Servlet.service() для сервлета [dispatcherServlet] в контексте с путем [] выдал исключение [Ошибка обработки запроса: java.lang.RuntimeException: не удалось десериализовать объект. Не удалось преобразовать значение типа com.google.cloud.Timestamp в строку (найдено в поле «expiryDate»)] с основной причиной.
Вот модель
@Data @NoArgsConstructor @AllArgsConstructor Общественный класс Вакансии { @DocumentId частный @Nullable String jobId; частный заголовок строки; частные приложения List; частная струнная компания; описание частной строки; частное расположение строки; требования к частной строке; частные представления строк; частная отметка времени истечения срока действия; частная временная метка PostedAt; public void setExpiryDate(String expiryDate) выдает ParseException { this.expiryDate = Timestamp.fromProto(Timestamps.parse(expiryDate)); } public void setPostedAt(String PostedAt) выдает ParseException { this.postedAt = Timestamp.fromProto(Timestamps.parse(postedAt)); } } Вот контроллер
@RestController @RequestMapping("/api/jobs") @Tag(name="Работы", описание = "Получает информацию, связанную с вакансиями") общественный класс JobsController { // http://localhost:8080/api/jobs @Autowired частный JobsService jobsService; общественный JobsController (JobsService jobsService) { this.jobsService = jobsService; } @Operation(summary = «Получить список всех заданий», метод = «GET») @ApiResponses(значение = { @ApiResponse(responseCode = "200", описание = "Найдены вакансии"), @ApiResponse(responseCode = "500", описание = "невозможно получить задания", контент = @Content(mediaType = "application/json", схема = @Schema(реализация = ApiResponseFormat.class))) }) @GetMapping("/") // http://localhost:8080/api/jobs/ public ResponseEntity getAllJobs() { пытаться { List jobList = jobsService.getAllJobs(); если(!jobList.isEmpty()) return ResponseEntity.ok(new ApiResponseFormat(true, «Задания успешно получены», jobList, «500»); еще вернуть ResponseEntity.status(HttpStatus.NO_CONTENT) .body(новый ApiResponseFormat(true,null,null,null)); } catch (ExecutionException | InterruptedException e) { вернуть ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ApiResponseFormat(false, «Ошибка получения заданий», null, e.getMessage())); } } Вот сервис:
@Service общественный класс JobsService { частная пожарная лавка Firestore; общественный JobsService () { this.firestore = FirestoreClient.getFirestore(); } общественные вакансии documentSnapshotToJobs (DocumentSnapshot document) { если (document.exists()) { вернуть документ.toObject(Jobs.class); } вернуть ноль; } public List getAllJobs() выдает ExecutionException, InterruptedException { CollectionReference jobsCollection = firestore.collection("Работы"); ApiFuture будущее = jobsCollection.get(); List jobsList = новый ArrayList(); for (DocumentSnapshot document: Future.get().getDocuments()) { Вакансии jobs = documentSnapshotToJobs (документ); если (работы != ноль) { jobsList.add(вакансии); } } вернуть список вакансий; } Я использую Postman для изменения базы данных. Когда я пытаюсь выполнить запрос GET, он должен вернуть список всех заданий. Но я ничего не получаю. URL правильный, потому что я получаю сообщения об ошибках.
Скриншот базы данных Firestore
Мобильная версия