Чтение тела POST: java.lang.IllegalStateException: только одно соединение может получить подписчик - PullRequest
0 голосов
/ 02 октября 2018

В Spring Webflux, когда я читаю тело POST и пытаюсь работать с ним, это всегда приводит к IllegalStateException из заголовка.

Здесь код:

  @Bean
  public RouterFunction<ServerResponse> selectByPost(SasoSecurityFacade solrHandler) {
    return RouterFunctions.route(RequestPredicates.POST("/v1/{collection}/select")
                                     .and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), request -> request.bodyToMono(String.class)
        .flatMap(s -> {
          System.out.println(s);
          return ServerResponse.ok()
              .syncBody(s);
        }));
  }

Также важен (как выясняется) запрос к серверу:

curl 'https://<myserver>:9443/v1/banana-int/select' -H 'Pragma: no-cache' -H 'Origin: https://<myserver>:9443' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7' -H 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' -H 'Content-type: application/x-www-form-urlencoded' -H 'Accept: application/json, text/plain, */*' -H 'Cache-Control: no-cache' -H 'Referer: https://<myserver>:9443/banana/src/index.html' -H 'Connection: keep-alive' -H 'DNT: 1' --data 'q=*:*&rows=20&wt=json' --compressed

Что я делаю не так?Как я могу отладить это?Кто еще читает мое сообщение, чтобы я получил это сообщение об ошибке?

1 Ответ

0 голосов
/ 02 октября 2018

Отправляемый вами запрос является запросом формы POST, который автоматически читается HiddenHttpMethodFilter.Этот фильтр использует данные формы для изменения метода HTTP в случае, если через параметр "_method" указан альтернативный метод.

В этом случае использование данных формы с выделенным request.formData() API в аннотации WebFlux/ function - лучший выбор, он кэшируется для будущего использования и не вызывает новую подписку.

Если вы хотите полностью отключить это поведение, вы сможете установить свойство вПружинный ботинок 2.1 .

...