WebTestClient не может отправить тело на MVC контроллер - PullRequest
0 голосов
/ 09 апреля 2020

RestTemplate javado c рекомендует перейти на WebClient даже для традиционных (нереактивных) приложений. Поэтому логично, что я также хотел бы использовать WebTestClient в своих тестах контроллера, чтобы использовать согласованный API.

Это прекрасно работает, например, для запросов GET. Но когда я POST с телом, данные тела не поступают на контроллер. Почему бы и нет?

Я могу проверить свои контроллеры следующим образом:

WebTestClient webTestClient = WebTestClient.bindToController(TokenController()).build

webTestClient.post().uri("/post2")
    .accept(MediaType.APPLICATION_JSON)
    .contentType(MediaType.APPLICATION_FORM_URLENCODED)
    .bodyValue("grant_type=authorization_code")
    .exchange()
    .expectStatus().isOk()

Код контроллера:

@PostMapping(
    path = ["/post2"],
    consumes = [APPLICATION_FORM_URLENCODED_VALUE],
    produces = [APPLICATION_JSON_VALUE])
ResponseEntity<Any> post2(@RequestParam(GRANT_TYPE) String grantType) {
    System.out.println(grantType)
    return ResponseEntity.ok("{\"a\": 33}")
}

В этом примере grantType имеет значение null. Если я запускаю приложение и отправляю стандартный HTTP-запрос, то grantType, как и ожидалось, содержит значение «authorization_code».

(я вручную перевел код с Kotlin на Java для этого вопроса, возможно, синтаксические ошибки)

...