Spring Rest - GET Örneği
Merhabalar.
Java EE ailesi içerisinde web servis için oluşturulmuş olan bir JAX-RS specti bulunmakta. Buna karşın Java EE spectler’inin yanında çokça tercih edilen Spring Framework de kendi Restful kütüphanesine sahip. Ben de bu ve gelecek birkaç yazıda Spring Rest ile örnekler yapmaya çalışacağım.
Bu yazıda Spring Restful Web Service ilr bir GET örneği yapacağız.
Başlayalım..
Hepsinden önce şunu söylemeliyim ki örneğimiz bir Spring Boot Application olacak. Bunun sebebi çok daha kolaylaştırılmış ve konfigürasyon karmaşalarından kurtulmuş bir uygulama yazma isteğimdir.
Projemizin bir maven projesi olacak ve şimdi pom.xml dosyamızı inceleyelim:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ilkaygunel</groupId>
<artifactId>SpringRestTutorial</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
Bizim yapacağımız örnek için sadece bir bağımlılığa ihtiyacımız var, o da spring-boot-starter-web kütüphanesi. Ayrıca projeyi Maven üzerinden koşturmak için de spring-boot-maven-plugin eklentisini projemize ekliyoruz. pom.xml dosyamız oldukça basit.
Şimdi Java sınıflarımızı inceleyelim.
Address.java
package pojo;
public class Address {
public Address(){
}
public Address(String neighborhood,String borough,String city,String country){
this.neighborhood = neighborhood;
this.borough = borough;
this.city = city;
this.country = country;
}
private String neighborhood;
private String borough;
private String city;
private String country;
public String getNeighborhood() {
return neighborhood;
}
public void setNeighborhood(String neighborhood) {
this.neighborhood = neighborhood;
}
public String getBorough() {
return borough;
}
public void setBorough(String borough) {
this.borough = borough;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
Address ismindeki pojo sınıfımız adres bilgisine ait birtakım özellikleri tutacak değişkenleri ve onların get-set metotlarını bünyesinde barındırıyor.
Person.java
package pojo;
public class Person {
public Person(){
}
public Person(String id,String name,String surname,Address address){
this.id = id;
this.name = name;
this.surname = surname;
this.address= address;
}
private String id;
private String name;
private String surname;
private Address address;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
Web servis üzerinde kullanacağımız ana sınıf olan Person sınıfı ise kişiye ait isim, soyisim ve adres bilgilerini barındırıyor. Burada adres bilgisini başka bir sınıf türünden sağladığına dikkat edelim. Az sonra web servisden çıktı alırken buraya tekrar değineceğim. Onun dışında bu sınıfımız da klasik bir POJO sınıfı gibi oldukça baist.
GetExampleController
package getExample;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import pojo.Address;
import pojo.Person;
@RestController
public class GetExampleController {
@RequestMapping("/getExample")
public List<Person> getExample(@RequestParam(value = "personId", defaultValue = "0") String id) {
List<Person> personList = new ArrayList<>();
Person person1 = new Person("1", "ilkay", "günel",
new Address("Cennet Mah.", "K.Çekmece", "İstanbul", "TÜRKİYE"));
personList.add(person1);
Person person2 = new Person("2", "alican", "akkuş",
new Address("Cennet Mah.", "K.Çekmece", "İstanbul", "TÜRKİYE"));
personList.add(person2);
Person person3 = new Person("3", "mustafa", "demir",
new Address("Cennet Mah.", "K.Çekmece", "İstanbul", "TÜRKİYE"));
personList.add(person3);
if (id.equals("0")) {
return personList;
}
else {
return personList.subList(Integer.parseInt(id)-1, Integer.parseInt(id));
}
}
}
GetExampleController sınıfımız web servis üretecek olan sınıfımızdır.
- Öncelikle web servis üretecek sınıfımızı @RestController notasyonu ile işaretliyoruz.
- Sınıfımızın içerisinde hangi metodun hangi URL’den gelen isteği karşılayacağını ise @RequestMapping notasyonu ile belirliyoruz. Bizim örneğimizde getExample URL’ine gelen istek getExample metoduna yönlendirilecek.
- getExample metodu döndüreceği sonucu belirleyecek bir parametre alacak şekilde yazıldı. @RequestParam notasyonu ile belirtilen bu parametre’nin adı value özelliği ile belirleniyor. Eğer kullanıcı herhangi bir parametre göndermezse varsayılan olarak bu değer defaultValue özelliğine atanmış olan 0 olacak.
- Kodumuz içerisinde ise eğer kullanıcı parametre göndermemiş ise bütün liste döndürülüyor. Eğer 1,2,3 sayılarından biri paremetre olarak gelirse listenin o gözündeki değer List interface’indeki sublist metodu ile alınıp döndürülüyor.
application.properties
Bu dosyanın olması projenin çalışması açısından elzem değil. Sadece bu dosya olmadığında Spring Boot projeyi localhost:8080 adresine deploy edecek. Eğer adres çubuğunda proje adı gözüksün ve bu adrese deploy edilsin derseniz bu dosyayı eklemelisiniz.
server.contextPath=/SpringRestTutorial
server.port=8080
Projenin Çalıştırılması
Ben bu projeyi Eclipse IDE’de yazıyorum ancak şimdi yapacağım yöntem NetBeans IDE’de gerçekleştirebilir.
Şimdi projeye sağ tıklayıp Rus As kısmından Maven Build‘i seçelim ve şu komutu girelim. Akabinde Run butonuna tıklayalım.
Spring Boot içerisindeki Tomcat’e uygulamamız deploy edilecek. Şimdi adres çubuğundan http://localhost:8080/SpringRestTutorial/getExample adresine gidelim.
Ve karşımızda web servisimizin çıktısı. Listedeki tüm elemanları barındıran JSON çıktımız tarayıcımızda görülüyor.
Şimdi de http://localhost:8080/SpringRestTutorial/getExample?personId=2 adresine gidelim. Id bilgisi 2 olan kullanıcı bize döndürülüyor.
Bu örneğin bir de XML formatında çıktı veren şeklini yapmak istedim ancak birkaç saatlik uğraşım neticesinde XML çıktısının sorunlarını aşamadım ve örneği yapamadım. Eğer ilerde yapabilirsem de yazıyı güncelleyeceğim.
Görüşene kadar sağlıcakla kalın.
Selam ve Sevgilerimle