以form表單的形式傳遞引數給rest介面
阿新 • • 發佈:2019-01-02
/** * 以傳統form表單的方式提交引數(並不是以json格式提交) * * @param url 提交的rest url * @param paramMap body引數 * @param responseType 返回型別 * @param <T> * @return */ public <T> T postForFormObject(String url, Map<String, Object> paramMap, Class<T> responseType, Object... uriVariables) { long astart = System.currentTimeMillis(); LinkedMultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>(); T result = null; for (Map.Entry<String, Object> entry : paramMap.entrySet()) { map.add(entry.getKey(), String.valueOf(entry.getValue())); logger.info("key: {} value:{}",entry.getKey(),String.valueOf(entry.getValue())); } HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); HttpEntity<LinkedMultiValueMap<String, String>> httpEntity = new HttpEntity<LinkedMultiValueMap<String, String>>(map, httpHeaders); try { if (null != uriVariables) { result = restTemplate.postForObject(url, httpEntity, responseType,uriVariables); }else{ result = restTemplate.postForObject(url, httpEntity, responseType); } }catch (Exception e){ logger.error("", e); } finally { long aend = System.currentTimeMillis(); logger.debug("url: {} invoke restful time consuming:{}", url, aend - astart); log(url + "/" + (StringUtils.isEmpty(uriVariables) ? "" : JsonUtil.writeObjectValueAsString(uriVariables)), null, result); } return result; }
有時候呼叫rest介面的時候,介面接收的引數並不是以json格式接收,而是以傳統表單資料的格式接收,這時候他這contetentType就不是json,這時候需要通過封裝一個HttpEntity再組裝好相關引數提交httpEntity,引數的組裝用的是LinkedMultiValueMap 貌似HttpEntity不接收value是object,所以String.valueOf將value值轉成了String,這樣就可以給rest介面傳遞表單的資料了