RestTemplateでつまったことが多いからまとめてみた
表題のとおりだが、RestTemplateでつまることが多かったため自分用にまとめてみた。
内容はシンプル。InvokerControllerがInvokeeControllerを呼び出すだけ。
PATCHメソッドはHttpComponentsClientHttpRequestFactory
を使用する。
サンプル
呼び出し元
@RestController public class InvokerController { private static final String URL_INVOKEE = "http://localhost:8080/invokee"; @GetMapping(path = "/get") public ResponseEntity<String> get() { RestTemplate template = new RestTemplate(); return template.getForEntity(URL_INVOKEE,String.class); } @GetMapping(path = "/post") public ResponseEntity<String> post() { SampleRequest request = new SampleRequest(); MultiValueMap<String, Object> bodyMap = new LinkedMultiValueMap<>(); request.setId("id"); bodyMap.add("id", request); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(bodyMap, headers); RestTemplate template = new RestTemplate(); return template.exchange(URL_INVOKEE, HttpMethod.POST, requestEntity, String.class); } @GetMapping(path = "/patch") public ResponseEntity<String> test005() throws IOException { SampleRequest request = new SampleRequest(); MultiValueMap<String, Object> bodyMap = new LinkedMultiValueMap<>(); request.setId("id"); bodyMap.add("id", request); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(bodyMap, headers); RestTemplate template = new RestTemplate(); // patchメソッド用。RestTemplateを書き換える。 HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); template.setRequestFactory(requestFactory); return template.exchange(URL_INVOKEE, HttpMethod.PATCH, requestEntity, String.class); } }
呼び出し先
@RestController public class InvokeeController { @GetMapping(path = "/invokee") public String get() { return "Getメソッド"; } @PostMapping(path = "/invokee") public String post(@ModelAttribute SampleRequest req) { return "Postメソッド"; } @PatchMapping(path = "/invokee") public String patch(@ModelAttribute SampleRequest req) { return "Patchメソッド"; } }