今回は、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なんとかなんとか」とエラーメッセージが表示されますが、どこでエラーとなるのか気になっていました。
