Java-клиент использует WebClient из загрузки Spring, отправляет несколько запросов POST вместо одного ⇐ JAVA
-
Гость
Java-клиент использует WebClient из загрузки Spring, отправляет несколько запросов POST вместо одного
Я разработал настольное приложение, в котором клиентская часть (пользовательский интерфейс) построена на javafx, а сервер — на Spring Boot. Для отправки запросов со стороны клиента я использовал WebClient, который иногда на медленных компьютерах отправляет несколько (от 2 до 20) запросов POST, хотя я намеревался отправить только один, в результате чего одна запись сохраняется в базе данных несколько раз, что абсурдно. Код используется для веб-клиента в следующем:
WebClient.builder() .baseUrl(базовый URL) .defaultHeader("Авторизация","Носитель"+jwt) .codecs(кодеки -> кодеки .defaultCodecs() .maxInMemorySize(МБ)) .build().post().uri("/some/url/") .body(Mono.just(объект),MyObject.class) .забрать() .onStatus(HttpStatus::isError, clientResponse -> Mono.error(new ClientRequestException ("ОШИБКА:" + clientResponse.statusCode()))) .bodyToMono(new ParameterizedTypeReference() {}) .retryWhen(Retry.backoff(2, Duration.of(2, ChronoUnit.СЕКУНДЫ)) .onRetryExhaustedThrow((retryBackoffSpec, повторить сигнал) -> новое ClientRequestException("НЕ ПОДКЛЮЧИТЬСЯ"))) .onErrorResume(ClientRequestException.class, ex -> { Platform.runLater(()-> ShowMessage.networkDown(таблица)); вернуть Mono.empty(); }).doOnSuccess(p->{ // показать сообщение об успехе!! }) .подписаться(); Я пытался прекратить хранение нескольких одинаковых записей в базе данных, установив уникальный столбец datetime в таблице базы данных, однако это неправильный способ решения этой проблемы.
Я разработал настольное приложение, в котором клиентская часть (пользовательский интерфейс) построена на javafx, а сервер — на Spring Boot. Для отправки запросов со стороны клиента я использовал WebClient, который иногда на медленных компьютерах отправляет несколько (от 2 до 20) запросов POST, хотя я намеревался отправить только один, в результате чего одна запись сохраняется в базе данных несколько раз, что абсурдно. Код используется для веб-клиента в следующем:
WebClient.builder() .baseUrl(базовый URL) .defaultHeader("Авторизация","Носитель"+jwt) .codecs(кодеки -> кодеки .defaultCodecs() .maxInMemorySize(МБ)) .build().post().uri("/some/url/") .body(Mono.just(объект),MyObject.class) .забрать() .onStatus(HttpStatus::isError, clientResponse -> Mono.error(new ClientRequestException ("ОШИБКА:" + clientResponse.statusCode()))) .bodyToMono(new ParameterizedTypeReference() {}) .retryWhen(Retry.backoff(2, Duration.of(2, ChronoUnit.СЕКУНДЫ)) .onRetryExhaustedThrow((retryBackoffSpec, повторить сигнал) -> новое ClientRequestException("НЕ ПОДКЛЮЧИТЬСЯ"))) .onErrorResume(ClientRequestException.class, ex -> { Platform.runLater(()-> ShowMessage.networkDown(таблица)); вернуть Mono.empty(); }).doOnSuccess(p->{ // показать сообщение об успехе!! }) .подписаться(); Я пытался прекратить хранение нескольких одинаковых записей в базе данных, установив уникальный столбец datetime в таблице базы данных, однако это неправильный способ решения этой проблемы.
Мобильная версия