Spring RestTemplateには、カスタムヘッダーをPOST= Request Objectと一緒に送信する方法があります。使用可能なexchange
メソッドを既に試しました。送信できるようです。キー値はカスタムヘッダーとペアになりますが、リクエストオブジェクト自体はHttpEntity.
次のコードはその試みを示しており、400 BadRequest
サーバー用。
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<?> httpEntity = new HttpEntity<Object>(requestDTO, requestHeaders);
RestTemplate restTemplate = new RestTemplate();
restTemplate.exchange(URL, HttpMethod.POST, httpEntity, SomeObject.class);
この状況を知っている人はいますか?それとも、私がやろうとしていることは不可能なことですか?
はい、HttpHeadersの代わりにMultiValueMapヘッダーを使用すると可能です
例:
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Authorization", "Basic " + base64Creds);
headers.add("Content-Type", "application/json");
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
HttpEntity<ObjectToPass> request = new HttpEntity<ObjectToPass>(objectToPassInstance, headers);
restTemplate.postForObject(urlPost, request, Boolean.class);
コントローラーがこのエンドポイントでブール値を返すという理由だけでBoolean.class(何でも可能)
コーディングで頑張ってください!
Springパッケージの完全なデバッグを有効にしてみてください。 「400 Bad Request」に関する詳細情報が得られるはずです。
<logger name="org.springframework">
<level value="DEBUG"/>
</logger>
残りのツールで同じリクエストを送信してみてください(Rest Console Chrome plugin)。
ブラウザのデバッグコンソールで何が起こるかを確認してください(例として、Chromeの[ネットワーク]タブ)。
その手順は常に私を助けます。