2016-03-27 78 views
0

我知道類似的帖子,我檢查了他們,但他們中沒有人可以幫助我。RestTemplate POST - 處理響應

我想發佈到需要三個參數和基本身份驗證的API(管理示例任務)。 在郵遞員工作。我提供如下機構:

{ 
    "title": "foo", 
    "description": "bar", 
    "completed": "false" 
} 

並設置基本身份驗證(使用用戶名和密碼)。該API發送響應這樣的:

{ 
    "id": 0001 
} 

一切工作正常,如果我發個帖子的API,但現在我要實現它在Java。如果我嘗試發送一個POST,我得到一個400錯誤的請求:HttpClientErrorException:400錯誤的請求(DefaultResponseErrorHandler)。 Task和TaskResponse是POJO的字段,如請求和響應以及無參數/全參數構造函數,getter和setter。

Task task = new Task("foo", "bar", false); 
     RestTemplate template = new RestTemplate(); 
     HttpEntity<Task> httpEntity = new HttpEntity<>(task, createHttpHeader()); 
     ResponseEntity<TaskResponse> result = template.exchange(uri, HttpMethod.POST, httpEntity, TaskResponse.class); 

private HttpHeaders createHttpHeader() { 
     HttpHeaders requestHeaders = new HttpHeaders(); 
     requestHeaders.setContentType(MediaType.APPLICATION_JSON); 
     requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); 
     requestHeaders.set("Authorization", createBasicAuthHeaderValue(username, password)); 
     return requestHeaders; 
    } 

    private String createBasicAuthHeaderValue(String username, String password) { 
     String credentials = username + ":" + password; 
     byte[] base64Credentials = Base64.encodeBase64(credentials.getBytes()); 
     return "Basic " + Arrays.toString(base64Credentials); 
    } 
+0

我嘗試過不同的事情,但我沒有爲我工作。從我的角度來看,問題是如何對響應做出反應,因爲它是例如不是請求,作爲響應返回。這是完全不同的。在這個例子中,創建的任務的ID。我試圖使用String.class作爲響應類型,但它不起作用。 – pas2al

+0

您是否在課程路徑中包含了Jackson,您可以啓用跟蹤模式並驗證請求主體是否具有正確的Json表示。 – Bhokal

+0

@Bhokal傑克遜是什麼人?我想知道...因爲響應只是一個JSON。不應該String.class爲我工作? – pas2al

回答

0

我發現,這個實現很好。它接受字符串作爲響應類型。還有一個問題,但與此背景無關。