Spring Web客户发布Long类型的表单数据

问题描述

我需要通过表单数据将数据发布到rest api。 值是长值。我已经写了下面的代码,给出了错误

MultiValueMap<String,Object> formData = new LinkedMultiValueMap<>();
  formData.add("commentId",Long.valueOf(98578976));
  formData.add("reactionID",Long.valueOf(609878777));


         webClient
          .post()
          .uri(url)
          .contentType(MediaType.APPLICATION_FORM_URLENCODED)
          .header("authorization",accesstoken)
          .syncBody(formData)
          .retrieve()
          .bodyToMono(SocialFeed.class)
          .block();

错误java.lang.classCastException:无法将类java.lang.Long强制转换为类java.lang.String(java.lang.Long和java.lang.String在加载程序“ bootstrap”的模块java.base中)。

通常,它的例外是string的多值映射string。如何发布其他类型的数据? 关键是字符串,值长吗?

解决方法

您需要将所有数据以 String 格式放入 MultiValueMap

MultiValueMap<String,String> formData = new LinkedMultiValueMap<>();
formData.add("commentId",String.valueOf(98578976L));
formData.add("reactionID",String.valueOf(609878777L));

您使用的Web客户端可能存在将数据转换为String类型的问题(我相信他在幕后所做的事情)。

什么对您有好处-您可以通过手动将数据强制转换为String来控制要发布的内容。因此,您不必依赖内部序列化器/广播/等。