1.Post(body空參)
?????????也就是說需要給一個空的json
? ? ? ? ?代碼:
String getDeviceUrl = this.MOVABLE_URL + "detected-data/getMachineLists";
// 遠程調用
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
// 請求頭
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("token",token);
// 請求體
HttpEntity<String> requestEntity = new HttpEntity<>("{}", headers);
String resultString = restTemplate.postForObject(getDeviceUrl, requestEntity,String.class);
JSONObject jo = JSONObject.fromObject(resultString);
2.Post(表單)
? ? ? ? 表單不能給json參數,不然被調用方接收不到參數
? ? ? ? 代碼:
String url = this.INTERFACE_CLIENT_URL + "/jkglApi/saveLog";
// 遠程調用
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
// 請求頭 指定Content-Type為application/x-www-form-urlencoded
HttpHeaders headers = new HttpHeaders();
//headers.setContentType(MediaType.APPLICATION_JSON);
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);// 構建參數
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("jkglApiCode", interfaceLog.getJkglApiCode());
params.add("ipAddress", interfaceLog.getIpAddress());
params.add("syncDate", interfaceLog.getSyncDate());
params.add("createDate", interfaceLog.getCreateDate());
params.add("statusSync", interfaceLog.getStatusSync().toString());// 設置請求參數
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(params, headers);// 發送POST請求
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);String resultString = response.getBody();
JSONObject jo = JSONObject.fromObject(resultString);
????????使用RestTemplate進行表單傳參的注意事項
在使用 RestTemplate 進行表單傳參時,有一些注意事項需要我們注意。
1.設置Content-Type為application/x-www-form-urlencoded
在發送POST請求時,我們需要設置請求頭的Content-Type為 application/x-www-fomm-urlencoded,表示請求體的內容是表單參數。通過 HtpHeaders 類的 setContentType()方法可以實現此功能。
2.使用MultiValueMap存儲表單參數
MuivalueMap 是Spring框架提供的一個接口,它繼承自 Map 接口,并提供了一些額外的方法,用于存儲鍵值對,在使用 RestTemplate 發送表單參數時,我們可以使用 MutValueMap 來存儲表單參數,通過 add0 方法添加鍵值對。
3.使用HttpEntity封裝請求體內容HtpEntty 是 RestTemplate 發送HTTP請求時的一個重要類,它用于封裝請求體內容。在發送POST請求時,我們需要創建一個 HpEnity 對象,并將 MultiValueMap 對象和 HttpHeaders 對象作為參數傳遞進去。?
?
3.Post(表單,方式2)
????????代碼:? 這種好像是將參數放到url后面,按理說post不應該這樣,但不知道為什么,可以正常訪問,被調用方也能獲取,不知道為啥....
String url = this.MOVABLE_URL + "users/login";
// 遠程調用
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
// 請求頭
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// 構建參數
Map<String, String> params= new HashMap();
params.put("username", MOVABLE_USERNAME);
params.put("password", MOVABLE_PASSWORD);
// 2. 構建 URL
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
params.forEach(builder::queryParam);
// 請求
ResponseEntity<String> response = restTemplate.exchange(builder.build().toUri(),HttpMethod.POST,new HttpEntity<>(headers),String.class);
String resultString = response.getBody();
JSONObject jo = JSONObject.fromObject(resultString);
持續更新....