web-dev-qa-db-ja.com

Spring RestTemplate to POSTカスタムヘッダーとリクエストオブジェクトを使用したリクエスト

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);

この状況を知っている人はいますか?それとも、私がやろうとしていることは不可能なことですか?

16
MCF

はい、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(何でも可能)

コーディングで頑張ってください!

67
Andrey
  1. Springパッケージの完全なデバッグを有効にしてみてください。 「400 Bad Request」に関する詳細情報が得られるはずです。

    <logger name="org.springframework">
        <level value="DEBUG"/>
    </logger>
    
  2. 残りのツールで同じリクエストを送信してみてください(Rest Console Chrome plugin)。

  3. ブラウザのデバッグコンソールで何が起こるかを確認してください(例として、Chromeの[ネットワーク]タブ)。

その手順は常に私を助けます。

0

HttpClient 3.xを使用している場合は、 this に従ってロギングをオンにします。 HttpClient 4.xを使用している場合は、 this に従ってロギングを有効にします。これにより、ネットワークを介して送信される内容がわかり、デバッグの出発点として適切です。

0