noprianto
noprianto
. 6 min read

Consume REST Menggunakan RestTemplate Spring Boot

Bismillah,
Pada kesempatan sebelumnya saya telah posting Web Service REST menggunakan Spring Boot, di tulisan ini saya akan coba gimana membuat REST client dan tentunya menggunakan Spring Boot. Walaupun sebenarnya bisa dicoba dengan mudah menggunakan tool yang sudah ada seperti browser, curl, ataupun yang lebih cantik menggunakan Postman. Tetapi tidak salahnya kita coba implementasikan Web Service REST client menggunakan Java. Beberapa point yang akan kita bahas adalah sebagai berikut

Konfigurasi Spring Boot

Hal pertama yang perlu kita lakukan ada mengkonfigurasi aplikasi yang akan kita buat, bisa menggunakan Spring Initializr di sini atau create project baru IntelliJ jenis projeknya Spring Initializr. Depedensi yang dibutuhakan adalah Spring Web Starter dan Lombok. Ya sederahan sekali depedensi yang dibutuhkan, Spring Web Starter menyediakan class RestTemplate sedangkan Lombok yang menyediakan getter dan setter. Berikut ini adalah potongan file pom.xml dari project yang akan kita buat

...
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
...

Selain file pom.xml, konfigurasi yang dibutuhkan adalah menambahkan property pada file application.properties di dalam folder resources. Isi file tersebut adalah sebagai berikut

base.url=http://localhost:8081

Fungsi properties di atas sebenarnya hanya menyediakan alamat url dari Web Service yang akan kita akses, kita letakkan di file application.properties agar kodingan kita lebih rapih dan juga ketika kita jadikan *.jar aplikasi kita tidak ikut di dalamnya .

Membuat Entitas

Selanjutnya kita perlu membuat entitas untuk menampung atua mengirimkan objek ke Web Service yang akan kita akses, contoh entitas yang kita buat adalah entitas Mahasiswa. Kodenya seperti di bawah ini

@Data
public class Mahasiswa {
    private String nim;
    private String nama;
    private String jurusan;
    private float ipk;
}

Cukup menambahkan @Data kita sudah tidak perlu lagi membuat method getter dan setter, anotasi tersebut telah disediakan oleh depedensi Lombok.

Membuat Class Bantu

Class bantu ini digunakan untuk menyediakan service-service entitas tertentu, misalkan yang sudah kita buat entitas Mahasiswa berarti isi class bantu tersebut antara lain GetMahasiswa, insertMahasiswa, updateMahasiswa, dll. Contoh kodenya adalah sebagai berikut

@Service
public class AkademikRestClient {

    private final static Logger LOGGER = LoggerFactory.getLogger(AkademikRestClient.class.getName());

    @Value(value = "${base.url}")
    private String basUrl;
    @Autowired
    private RestTemplate restTemplate;

    public String getMahasiswas() {
        String response = restTemplate.getForObject(basUrl + "/api/mahasiswa", String.class);
        LOGGER.info(response);
        return response;
    }

    public Mahasiswa getMahasiswaByNim(String nim) {
        Mahasiswa mahasiswa = restTemplate.getForObject(basUrl + "/api/mahasiswa/{nim}", Mahasiswa.class, nim);
        LOGGER.info(mahasiswa.toString());
        return mahasiswa;
    }

    public String getMahasiswaNama(String nama) {
        UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(basUrl + "/api/mahasiswaNama")
                .queryParam("nama", nama);
        LOGGER.info(builder.toUriString());
        String response = restTemplate.getForObject(builder.toUriString(), String.class);
        LOGGER.info(response);
        return response;
    }

    public boolean insert(Mahasiswa mahasiswa) {
        HttpEntity<Mahasiswa> mahasiswaHttpEntity = new HttpEntity<>(mahasiswa);
        ResponseEntity<String> response = restTemplate.exchange(basUrl + "/api/mahasiswa", HttpMethod.POST, mahasiswaHttpEntity, String.class);
        LOGGER.info("" + response.getStatusCode().value());
        return (HttpStatus.CREATED.value() == response.getStatusCodeValue());
    }

}

Penjelasan kode di atas adalah sebagai berikut

  • @Service, untuk menandai bahwa class tersebut akan di-Autowire di lain class. Sebenarnya @Service bisa diganti dengan @Component atau @Repository
  • @Value(value = "${base.url}"), digunakan untuk mengambil nilai yang terdapat pada file application.properties dengan properti base.url
  • @Autowired, anotasi tersebut pada instance restTemplate menandakan bahwa instance tersebut di-inisialisasi dari Spring. Class RestTemplate menyediakan fungsi untuk mengakses REST dengan method GET, POST, PUT, dan DELETE.

Terdapat beberapa class dan method yang penting di atas, class dan method tersebut adalah sebagai berikut

  • getForObject(), digunakan untuk mengambil data dengan method yang disediakan adalah GET. Ketika dari sisi server hanya mengembalikan HttpStatus sebaiknya tidak menggunakan ini, digunakan ketika server mengembalikan data.
  • exchange(), method ini dapat digunakan untuk semua method http, kita dapat mengambil HttpStatus jika dari server hanya mengembalikan HttpStatus.
  • Class UriComponentsBuilder, class yang dapat digunakan untuk membantu request dengan parameter. Misalkan jika method yang kita panggil menggunakan RequestParameter. Contoh penggunaannya dicontohkan seperti berikut ini
public String getMahasiswaNama(String nama) {
        UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(basUrl + "/api/mahasiswaNama")
                .queryParam("nama", nama);
        LOGGER.info(builder.toUriString());
        String response = restTemplate.getForObject(builder.toUriString(), String.class);
        LOGGER.info(response);
        return response;
    }

Method di atas contoh penggunaan menggunakan parameter, url yang dipanggil seperti ini http://localhost:8081/api/mahasiswaNama?nama=[parameter]. Misalkan parameternya ada banyak, tambahkan .queryParam("nama_parameter","valuenya").

Ujicoba Aplikasi

Untuk melakukan ujicoba bisa menggunakan unit test, kira-kira kode yang dapat digunakan adalah sebagai berikut

@RunWith(SpringRunner.class)
@SpringBootTest
public class ClientApplicationTests {

    @Autowired
    private AkademikRestClient akademikRestClient;

    @Ignore
    @Test
    public void getMahasiswasTest() {
        String response = akademikRestClient.getMahasiswas();
        assertTrue(response != null && !response.isEmpty());
    }

    @Ignore
    @Test
    public void getMahasiswasByNimTest() {
        Mahasiswa response = akademikRestClient.getMahasiswaByNim("075410099");
        assertTrue(response != null);
    }

    @Ignore
    @Test
    public void getMahasiswasByNamaTest() {
        String response = akademikRestClient.getMahasiswaNama("noprianto");
        assertTrue(response != null && !response.isEmpty());
    }

    @Test
    public void insertMahasiswasTest() {
        Mahasiswa mahasiswa = new Mahasiswa();
        mahasiswa.setNim("075410105");
        mahasiswa.setIpk(2.50F);
        mahasiswa.setJurusan("Teknologi Informasi");
        mahasiswa.setNama("Fullan Bin Fudail");
        assertTrue(akademikRestClient.insert(mahasiswa));
    }

}

Silakan jalankan unit test di atas, hilangkan anotasi @Ignore agar setiap methode dilakukan testing. Bagimana mudah bukan? Untuk kode dari contoh di atas dapat didownload di sini.

Demikianlah tulisan saya penggunaan Spring Boot untuk mengkonsumsi Web Service REST, semoga bermanfaat dan menjadi pengetahuan baru bagi Anda yang sedang belajar Java atau Spring Boot. Kritik dan saran selalu diharapkan untuk meningkatkan kwalitas tulisan saya. 🙂

Referensi

comments powered by Disqus