MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<>(); requestEntity.add("clientFlag", clientFlag); requestEntity.add("xml", xml); requestEntity.add("verifyData", strMd5);
String s = REST_TEMPLATE.postForObject("http://10.10.129.19/svsr/Receive.asmx/OrderXML", requestEntity, String.class);
!!
最直接的方法就是 寫個類吧!!
可惜了 JAVA 沒有 c# 中 匿名類 這個東西啊
var news = new { title="特大喜訊",author="夕陽眼",postdate="3013-10-9",msg="今晚公布"};
補充:
設置請求頭:
MultiValueMap<String, Object> postParameters = new LinkedMultiValueMap<>(); postParameters.add("userCode", "291974"); HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/x-www-form-urlencoded"); HttpEntity<MultiValueMap<String, Object>> r = new HttpEntity<>(postParameters, headers); String data= restTemplate.postForObject("http://10.10.12.27:9000/Criteria", r, String.class); System.out.println(data);
注意:
RestTemplate 會對請求頭判斷,會更具請求頭不通走不同的邏輯。默認是 text/html /*
如果是 application/x-www-form-urlencoded 這個請求頭 會對數據鏡像 url 編碼。
不可以傳遞 非 字符串類型的數據!!
關於 HttpEntity 這個對象的一點說明
HttpEntity 就是存放 兩個字段數據 一個是請求數據 一個是請求頭! 從定義上就可以看到 雖然可以 POST 等 提交from 數據 但是好是推薦使用實體類型來傳遞 HTTP 請求數據。
public class HttpEntity<T> { private final HttpHeaders headers; private final T body; public HttpEntity(T body, MultiValueMap<String, String> headers) { this.body = body; HttpHeaders tempHeaders = new HttpHeaders(); if (headers != null) { tempHeaders.putAll(headers); } this.headers = HttpHeaders.readOnlyHttpHeaders(tempHeaders); } }
