JavaでRestTemplateを使ってAPI通信をする方法

javaのspringで、resttemplateを使ってRest通信を行う方法を紹介します。

RestTemplateは、REST API(Web API)を呼び出すためのメソッドを提供するクラスで、Spring Frameworkが提供するHTTPクライアントです。

DTOからJson形式のリクエストに変換する処理や、Json形式のレスポンスをDTOにバインドする処理をしてくれ、 データ形式Json以外にも様々対応していています。

ここではPOSTやGETメソッドで、json形式のデータを受け取る方法を紹介します。

Serviceクラス


public class UserManager {
    @Value("${com.aaa.usercenter.url}")
    private String userCenterUrl;

    @Resource  //(1)
    private RestTemplate restTemplate;

    private static Logger logger = LoggerFactory.getLogger(UserManager.class);

    public Boolean saveUser(@RequestBody CreateReq req)  {  //(2)
        User user = new User();
        user.setAccount(req.getAccount());
        user.setPassword(req.getPassword());
        user.setName(req.getName());
        try {
            //APIに送るリクエストを作る
            RequestEntity<User> request = RequestEntity
                    .post(new URI( userCenterUrl + "/register"))   //通信先のurl
                    .accept(MediaType.APPLICATION_JSON)
                    .body(user);
            //APIからレスポンスが返ってくる
            ResponseEntity<CreateResp> response = restTemplate
                    .exchange(request, CreateResp.class);
            return Objects.requireNonNull(response.getBody()).getCheck();
        } catch (URISyntaxException e) {
            logger.error(e.toString());
            return false;
        }
    }

    public User getUserByAccount(String account)  {  //(3)
        try {
            String url = userCenterUrl + "/info";
            //request entity is created with request headers
            HttpEntity requestEntity = new HttpEntity<>(new HttpHeaders());
            UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(url)
                    .queryParam("account", account);
            ResponseEntity<User> response = restTemplate.exchange(
                    uriBuilder.toUriString(),
                    HttpMethod.GET,
                    requestEntity,
                    User.class
            );
            return response.getBody();
        } catch (Exception e) {
            logger.error(e.toString());
            return null;
        }
    }


(1) RestTemplateをインジェクションしています。

(2)POSTでjson形式のデータを送り、json形式のデータが返ってくるメソッドです。ここではUserクラスのデータを送っています。

(3)GETで、paramを送り、json形式のデータを要求するメソッドです。ここではUserクラスのデータが返ってきます。


json形式のbodyを送るのか、paramで通信するのか等で若干違いがあります。
用件に合わせて色々とカスタマイズできるようです。


springの日本語版ドキュメントに他のメソッドも含め色々と書いてあるので参考にしてみてください。

spring.pleiades.io