使用RestTemplate发送multipart/form-data格式的数据

现有业务场景需要使用RestTemplate发送一个post请求,请求格式为multipart/form-data的,可以使用以下方法:

public Object sendRequest(Object obj) { RestTemplate restTemplate = new RestTemplate(); //设置请求头(注意会产生中文乱码) HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>( popHeaders(obj), headers); //发送请求,设置请求返回数据格式为String ResponseEntity<String> responseEntity = restTemplate.postForEntity("http:xxx.xx", request, String.class); } //组装请求体 protected MultiValueMap<String, String> popHeaders(Object obj) { SubmitOrderDTO submit = (SubmitOrderDTO) obj; MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>(); map.add("order_id", submit.getOrderId()); map.add("userName",submit.getUserName()); //..... return map; }

 PS:对于上面的代码进行操作之后发现如果相应的参数中包含中文就会出现乱码,所以做了一下修改:

public Object sendRequest(Object obj) { RestTemplate restTemplate = new RestTemplate(); //对中文格式数据进行处理 FormHttpMessageConverter fc = new FormHttpMessageConverter(); StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8); List<HttpMessageConverter<?>> partConverters = new ArrayList<HttpMessageConverter<?>>(); partConverters.add(stringConverter); partConverters.add(new ResourceHttpMessageConverter()); fc.setPartConverters(partConverters); restTemplate.getMessageConverters().addAll(Arrays.asList(fc,new MappingJackson2HttpMessageConverter())); //发送请求,设置请求返回数据格式为String(去除上面方法中使用的httpEntity) ResponseEntity<String> responseEntity = restTemplate.postForEntity("http:xxx.xx", popHeaders(obj), String.class); } //组装请求体 protected MultiValueMap<String, String> popHeaders(Object obj) { SubmitOrderDTO submit = (SubmitOrderDTO) obj; MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>(); map.add("order_id", submit.getOrderId()); map.add("userName",submit.getUserName()); //..... return map; }

__EOF__

本文作者Jun10ng
本文链接https://www.cnblogs.com/wangzun/p/7765387.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Johnson_wang  阅读(40760)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示