Spring Boot RestTemplate Nedir ve Kullanımı
Spring Boot Dersleri‘ne devam ediyorum.
Bu yazıda RestTemplate’nin ne olduğuna ve hangi amaçlarda kullanacağımızı anlatacağım.
RestTemplate Nedir?
Spring projelerimizde HTTP isteklerini yapıp yönetebileceğimiz Spring Boot Web kütüphanesinin içerisinde yer alan bir yapıdır. Bu sayede bir client olarak bir servisten veri çekebiliriz.
Özellikleri
- getForObject
- getForEntity
- postForEntity
- postForObject
Örnek
Projemiz için elimizde Ricky and Morty dizisinin Rest API’si bulunmakta.
https://rickandmortyapi.com/api/character
Code language: JavaScript (javascript)
Yukarıkadaki API’dan dizideki karakterlerin verilerini çeken bir uygulama yapalım.
Maven bağımlılığımız aşağıdaki gibi olacaktır.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
Code language: HTML, XML (xml)
Sadece Spring’in web kütüphanesi yeterli ve lombok kullanıyorum.
Spring Boot uygulamamızın her yerinde RestTemplate’imizi ve Http Header’i kullanabilmemiz için bir adet instance oluşturmalıyız. Bunu da uygulamamızın çalıştırdığımız application sınıfımızın içerisinde yapalım.
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public HttpHeaders httpHeaders() {
return new HttpHeaders();
}
Code language: PHP (php)
Entitymizi hazırlayalım. Client Apimi’ze bakarsak Karakterler için bir INFO bilgisi ve devamında RESULT dizini bulunuyor. Bunlar için ayrı ayrı entitylerimizi hazırlayalım.
@Data
public class Info {
private Integer count;
private Integer pages;
private String next;
private String prev;
}
Code language: PHP (php)
Info sınıfımız tamam. Result enttiymizi yapalım.
@Data
public class Result {
private Integer id;
private String name;
private String status;
private String species;
private String type;
private String gender;
private String image;
private String url;
private Date created;
}
Code language: PHP (php)
Entitymiz hazır. Ve son olarak Character sınıfımız oluşturuyoruz.
@Data
public class Character {
Info info;
List<Result> results;
}
Code language: PHP (php)
API’mizden bize gerekli olan değerler bunlar. Controller’imizi oluşturalım.
@RestController
public class ApiController {
@Autowired
private ApiService apiService;
@GetMapping("/")
public ResponseEntity<Character> getCharacters() {
Character characters = apiService.getAllCharacter();
return new ResponseEntity<>(characters, HttpStatus.OK);
}
}
Code language: PHP (php)
Kullanıcının istek oluşturduktan sonra karşılık gelen servisi oluşturalım. Bu servisimizde API’mize bağlanacağız ve gelen datayı parse edip, bir listeye alacağız.
@Service
public class ApiService {
@Autowired
private RestTemplate restTemplate;
@Autowired
private HttpHeaders httpHeaders;
private static final String CHAHRACTER_API = "https://rickandmortyapi.com/api/character";
public Character getAllCharacter() {
httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<>(httpHeaders);
ResponseEntity<Character> response = restTemplate.exchange(CHAHRACTER_API, HttpMethod.GET,
entity, Character.class);
return response.getBody();
}
}
Code language: JavaScript (javascript)
Servisimiz yazdık. Burada dikkat etmemiz gereken satır
restTemplate.exchange(CHAHRACTER_API, HttpMethod.GET,entity,Character.class);
Code language: CSS (css)
Burada exchange metodunu kullanarak API adresimizi, header bilgimizi ve mapper etmemiz için gerekli olan tipimizi yani gelen verinin aslında Character sınıfında olacağınız belirtiyoruz.
Bu cevabının body’sinde bizim sınıfımıza göre maplenmiş veriler bulunmakta.
Postman’dan istek atalım ve sonucumuza bakalım.
Sonraki Spring Boot Derslerslerinde görüşmek üzere.
No Comment! Be the first one.