问题描述
我需要通过表单数据将数据发布到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来控制要发布的内容。因此,您不必依赖内部序列化器/广播/等。