RestTemplate 送信フォーマットによる実装方法

今回は、RestTemplateを使って送信時にフォーマットによる実装方法についてみていきたいともいます。

今回見てみたい送信フォーマットは以下となります。

  • application/json
  • application/x-www-form-urlencoded

application/json

public void someMethod() {
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(new MediaType(MediaType.APPLICATION_JSON, StandardCharsets.UTF_8));

    Map<String, String> request = new HashMap<>();
    request.put("SOME_PARAM", "test");

    HttpEntity<Map<String, String>> data = new HttpEntity<>(request, headers);

    val response = restTemplate.exchange("localhost:8080/test", HttpMethod.POST, data, String.class);
    val rtnData = response.getBody();
}
  • HttpHeadersにContentTypeを指定する必要があります。
    • headers.setContentType(new MediaType(MediaType.APPLICATION_JSON, StandardCharsets.UTF_8));
  • application/jsonフォーマットでのリクエストはHashMapを使用します。

application/x-www-form-urlencoded

    public void someMethod() {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(new MediaType(MediaType.APPLICATION_FORM_URLENCODED, StandardCharsets.UTF_8));

        MultiValueMap<String, String> request = new LinkedMultiValueMap<>();
        request.add("SOME_PARAM", "test");

        HttpEntity<MultiValueMap<String, String>> data = new HttpEntity<>(request, headers);

        val response = restTemplate.exchange("localhost:8080/test", HttpMethod.POST, data, String.class);
        val rtnData = response.getBody();
    }
  • HttpHeadersにContentTypeを指定する必要があります。
    • headers.setContentType(new MediaType(MediaType.APPLICATION_FORM_URLENCODED, StandardCharsets.UTF_8));
  • application/x-www-form-urlencodedフォーマットでのリクエストはLinkedMultiValueMapを使用します。(HashMapを使っていてエラーになり探すのに苦労しました。)

終わりに

「application/x-www-form-urlencoded」送信フォーマットを使用していてリクエストをHashMapを使っていましたが、エラーとなってしまってRestTemplateクラスを仲間でデバックした経験が。。。コンソールにも「HashMapなんとかなんとか」とエラーメッセージが表示されますが、どこでエラーとなるのか気になっていました。

コメントを残す