Невозможно получить доступ к данным формы в webflux / webclient - PullRequest
0 голосов
/ 24 марта 2019

Я получаю 400 неверных запросов при доступе к данным формы через @ RequestParam

Мой код Java

public Flux<String> postWithFormData() {

    MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
    map.add("id", "Test Post Form data");

    return webClient
            .post()
            .uri("http://localhost:8080/webclient/rest6")
            .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE)
            //.syncBody(map)
            .body(BodyInserters.fromFormData("id", "Test Post Form data"))
            .retrieve()
            .bodyToFlux(String.class);

}

Класс контроллера

@RequestMapping(value = "rest4", method = RequestMethod.POST)
public ResponseEntity<String> rest4(@RequestParam("id") String id) {
    ResponseEntity<String> response = new ResponseEntity<String>("Success",HttpStatus.OK);
    return response;

}

Как получить доступ к данным формы в контроллере?

1 Ответ

0 голосов
/ 24 марта 2019

Ваш postWithFormData () код в порядке.

Проблема в вашем rest4 (..) методе.Вы не можете использовать аннотацию @ RequestParam для получения параметра POST (его следует использовать для получения параметров GET).

Вместо этого вы можете использовать DTO.Если вы измените код таким образом, он должен работать:

  @PostMapping(value = "rest4")
  public ResponseEntity<String> rest4(ValueDto value) {
    System.out.println(value.getId());
    ResponseEntity<String> response = new ResponseEntity<String>("Success", HttpStatus.OK);
    return response;
  }

  static class ValueDto {
    private String id;

    public String getId() {
      return id;
    }

    public void setId(String id) {
      this.id = id;
    }
  }
...