LoginSignup
85
79

More than 5 years have passed since last update.

SpringのRestTemplateが便利すぎて鼻血でた

Last updated at Posted at 2016-10-25

元々はC#、最近はNode.jsがコーディングの主流だったのですが、仕事で久々にJavaを使うことになりました。Javaは10年以上前にJava AppletからJNIでPCの周辺機器を操作するようなものを作って以来です。ServletとかTomcatとかStrutsとかとは無縁に生きてきました。
というわけで、久々にJavaを使って見たら、Spring 3.0~ にRestTemplateとかいう余りに素敵なクラスがあって驚いて鼻血が出たので、驚きを記事にしてみました。

RestTemplate

RestTemplateの何がすごいかというと、Rest APIを呼び出すのに1行だけで済んでしまうという点です。これまでなら、HttpConnectionをOpenして、そこからBufferedWriterで書き出して、ResponseをBufferedReaderで読み込んで、みたいなことをしていましたが、そんな複雑なコードを全てスキップできます。ということでサンプルコードはこちら。

// packageは省略
import org.springframework.web.client.RestTemplate;

public class Main {
    public static void main(String[] args){
        RestTemplate restTemplate = new RestTemplate();
        User user = restTemplate.getForObject("https://server.to/api/user/12345", User.class);
    }
}

これだけで、https://server.to/api/user/12345にGETし、戻ってきたJSONデータをUser型にキャストしてuser変数に設定してくれます。
なんということでしょう!

MockRestServiceServer

RestTemplateのすばらしいところはコードがシンプルなだけでなく、テストもシンプルになるところです。RestTemplateを使った単体試験をするには、接続先のモックが必要となりますが、それもとっても簡単に作成できるのです。

@RunWith(MockitoJUnitRunner.class)
public class TestCase{
    @Test
    public void Test(){
        RestTemplate restTemplate = new RestTemplate();

        MockRestServiceServer mockServer = MockRestServiceServer.CreateServer(restTemplate);
        mockServer.expect(requestTo("https://server.to/api/user/12345"))
            .andRespond(withSuccess("{\"id\":\"12345\", \"Name\":\"Kawasaki Taro\", \"Age\":26}", MediaType.APPLICATION_JSON_UTF8));

        User user = restTemplate.getForObject("https://server.to/api/user/12345", User.class);

        assertThat(user.getId(), is("12345"));
        assertThat(user.getName(), is("Kawasaki Taro"));
    }
}

これでモックが動きます。
いやあ世の中便利になっていますねぇ。

参考:

85
79
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
85
79