1. 程式人生 > >springboot學習總結(四)RestTemplate用法2

springboot學習總結(四)RestTemplate用法2

(一)delete請求

delete請求的介面api如下

public void delete(String url, Object... uriVariables) throws RestClientException 
public void delete(String url, Map<String, ?> uriVariables) throws RestClientExceptionpublic void delete(URI url) throws RestClientException 

controller方法

    @DeleteMapping("/deleteEntityTest")
    
public JSONObject deleteEntityTest(@RequestParam Long id) { JSONObject jsonObject = new JSONObject(); jsonObject.put("id", id); return jsonObject; }

測試方法

    @Test
    public void deleteTest() {
        String url = "http://localhost:8080/deleteEntityTest?id=";
        restTemplate.delete(url, 
1); }

關於delete和put這兩種請求,預設提供的api中返回值都是void,對於這種沒法獲取返回資訊的有時會造成判斷的失誤。例如,其實請求並未走controller的方法,由於許可權等問題被403了,也是正常返回,但是無法判斷是否成功delete了。所以直接這樣呼叫不妥。

個人推薦,像delete、put這類請求用他原生的exchange()或者execute()方法

    @Test
    public void deleteTest() {
        String url = "http://localhost:8080/deleteEntityTest?id=1";
        MultiValueMap
<String, String> map = new LinkedMultiValueMap<>(); HttpHeaders headers = new HttpHeaders(); MimeType mimeType = MimeTypeUtils.parseMimeType(MediaType.APPLICATION_JSON_UTF8_VALUE); MediaType mediaType = new MediaType(mimeType.getType(), mimeType.getSubtype(), Charset.forName("UTF-8")); // 請求體 headers.setContentType(mediaType); ResponseEntity<JSONObject> entity = restTemplate.exchange(url, HttpMethod.DELETE, new HttpEntity<>(map, headers), JSONObject.class); System.out.println("body:" + entity.getBody() + ",StatusCode:" + entity.getStatusCode() + ",StatusCodeValue:" + entity.getStatusCodeValue() + ",:Headers" + entity.getHeaders()); }

控制檯列印資訊:

body:{"id":1},StatusCode:200,StatusCodeValue:200,:Headers{Content-Type=[application/json;charset=UTF-8], Transfer-Encoding=[chunked], Date=[Mon, 14 Jan 2019 13:21:54 GMT]}

用這個可以根據返回的狀態碼,或者返回的資訊,來判斷是否刪除成功。