首页 > 解决方案 > 用 List 转换对象字段到 MultiValueMap

问题描述

我正在尝试将系统与Stripe Payments 集成,他们的 API 需要接收x-url-form-encoded而不是在 Stripe Payments 平台上执行请求之前,我会使用所需的信息来处理数据。jsonx-url-form-encoded

基本上我需要的是将其字段上具有列表的复杂对象转换为 MultValueMap。如果有兴趣,下面列出了完整的问题。

一个常见的 curl 看起来像:

curl https://api.stripe.com/v1/checkout/sessions \
  -u sk_test_your_key: \
  -d success_url="https://example.com/success" \
  -d cancel_url="https://example.com/cancel" \
  -d "payment_method_types[0]"=card \
  -d "line_items[0][price]"=price_H5ggYwtDq4fbrJ \
  -d "line_items[0][quantity]"=2 \
  -d mode=payment

我的对象看起来像:

String succes_url;
String cancel_url;
String mode;
List<LineItems> line_items;

主要问题是当我尝试转换List<LineItems>...

转换如下所示:

    Map<String, String > objectToSend = objectMapper.convertValue(request, new TypeReference<>() {});
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
parameters.setAll(objectToSend);

我正在尝试执行请求,例如:

 return webClient.post()
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .body(BodyInserters.fromFormData(parameters))
                .retrieve().bodyToMono(String.class)
                .onErrorMap(e -> new RuntimeException(e.getMessage()))
                .block();

还有另一种方法可以用来执行x-url-encoded请求,而不必“手动”用信息填充地图?

标签: javaspring-bootstripe-paymentsspring-webclient

解决方案


推荐阅读