私は同様の投稿を認識していますが、私はそれらをチェックしましたが、そのうちのどれも私を助けない可能性があります。RestTemplate POST - ハンドルレスポンス
3つのパラメータと基本認証を必要とするAPI(POSTタスクを管理する)にPOSTしたいと考えています。 郵便配達でそれは動作します。
{
"title": "foo",
"description": "bar",
"completed": "false"
}
とし、基本認証(ユーザー名とパスワードを使用)を設定します。 APIは、このような応答を送信:私はAPIにPOSTを送信する場合
{
"id": 0001
}
すべてが正常に動作しますが、今、私はJavaでそれを実装します。私はPOSTを送信しようとすると400の悪い要求を受け取ります:HttpClientErrorException:400 Bad Request(DefaultResponseErrorHandler)。 TaskとTaskResponseは、リクエストとレスポンス、および引数なし/完全引数のコンストラクタ、getterとsetterのようなフィールドを持つpojoです。
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);
}
私は別のものを試しましたが、私は何も私のために働くものではありません。私の視点から見ると、問題はレスポンスにどのように反応するかです。レスポンスとして戻ってくるリクエストなどではないからです。それはまったく違うものです。この例では、作成されたタスクのIDです。レスポンスタイプとしてString.classを使用しようとしましたが、動作しません。 – pas2al
クラスパスにJacksonを含めました。トレースモードを有効にして、要求本体に正しいJson表現があるかどうかを確認できます。 – Bhokal
@Bhokalジャクソンとは何ですか?私は疑問に思っています...応答は単なるJSONなので。 String.classは私のために働くべきではありませんか? – pas2al