現有業務場景需要使用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; }