使用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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM