【问题标题】:Java Spring WebClient request equivalent of curl with multiple --data-rawJava Spring WebClient 请求等效于带有多个 --data-raw 的 curl
【发布时间】:2021-05-04 11:26:19
【问题描述】:

关于带有多个 --data-raw 的 curl 请求的小问题,以及如何构造其 Java WebClient 对应项。

我有一个非常简单的 curl 请求:

curl -X GET https://some-url:8080/services/auth/login --data-raw username="some-user" --data-raw password="some-password"

我遇到困难的部分是 double --data-raw, username="some-user" --data-raw password="some-password"

我最初认为我可以将它们包装在 JSON 中,然后与 .body(BodyInserters.fromValue()) 结合使用,但事实并非如此。

--data-raw '{"username": "some-user", "password": "some-password"}'

然后我尝试了(基于此帖子评论):

webClient.mutate().baseUrl(someUrl).defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE).build().get().uri(uriBuilder -> uriBuilder.path(someRoute).queryParam("username", "some-user").queryParam("password", "some-password").build()).retrieve().bodyToMono(String.class);

以上都不起作用。

请问如何使用 Java Spring WebClient 发送此 curl 请求的等价物?

谢谢

【问题讨论】:

  • curls -d, --data, --data-raw 将内容类型隐式设置为 application/x-www-form-urlencoded。您是否尝试过在 webclient 中设置内容类型标头?
  • (已更正)...和多个 --data 选项,每个选项都应该(和你的)name=value,与 & 组合,这就是 x-www-form-urlencoded被定义为工作。请注意,使用包含需要百分比编码的字符的 --data-raw 值(您不需要)将导致服务器解析错误并可能失败。
  • 您好,非常感谢您的 cmets,非常感谢。我根据你们的输入编辑了原始问题

标签: java curl


【解决方案1】:

感谢cmets,正确用法是:

  1. 创建一个

    private final MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
    
  2. 在网络客户端上:

    webClient.mutate().baseUrl("https://...").build().post().uri("/route").headers(httpHeaders -> httpHeaders.setAll(headers))
    

    其中headersformData

【讨论】:

    猜你喜欢
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多