Merhabalar. Bu yazıda JAX-RS içindeki Resource Locators And Subresources konusunu işleyeceğiz.

JAX-RS içerisinde şimdiye kadar işlemlerimizi tek bir notasyon ve metotla halletmeye çalıştık. Örneğin @GET ile işaretlenmiş bir metot ile tüm işimizi görmeye çalıştık. Şimdi işleyeceğimiz konu ise aslında parçalı şekilde işler yapmayı amaçlayan bir yapı. Hemen örnek uygulama yaparak konuyu kavrayalım:

AppConfig.java

AppConfig sınıfımız önceki derslerden de bildiğiniz üzere root path ayarını yapıyordu.

package restPackage;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("restService")
public class AppConfig extends Application{

}

ResourceLocatorAndSubResource.java

ResourceLocatorAndSubResource sınıfımız içerisinde sınıfı işaretlediğimiz @Path notasyonu Root Resource olarak isimlendirilir arkadaşlar. Çünkü ilgili path’e bağlı olarak web servis isteği alacak ve karşılayacak olan sınıf bu sınıftır. getCustomer metodu ise Subresource Locater olarak isimlendirilir. İhtiyaç duyulan objeyi temin eder. Burada Customer objesini temin ediyor. Gördüğünüz üzere bu sınıfta bir @GET metodu yok. O da Subresource olarak isimlendirilen class içerisinde.

package resource;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.Path;
import javax.ws.rs.PathParam;


@Path("/ResourceLocatorAndSubResource")
public class ResourceLocatorAndSubResource {
	
	@Path("/customers/{id}")
	public Customer getCustome(@PathParam("id") String id){
		Customer returnedObject=new Customer();
		List<Customer> customers = new ArrayList<Customer>();
		customers.add(new Customer("1", "alican", "akkus","kocaeli"));
		customers.add(new Customer("2", "isa", "aytimur","adana"));
		customers.add(new Customer("3", "mustafa", "demir","ısparta"));
		
		for(Customer c : customers){
			if (c.getId().equals(id)) {
				returnedObject = c;
			}
		}
		return returnedObject;
	}
}

Customer.java

Customer sınıfı bizim normalde kullandığımız POJO sınıfları ile hemen hemen aynı. Tek farkı içerisinde JAX-RS notasyonu ile işaretlenmiş iki adet metot barındırmasıdır. Burada Customer sınıfı Subresource olarak isimlendirilir. @GET ile işaretlenmiş birinci metot doğrudan ResourceLocatorAndSubResource sınıfı içerisindeki /customers/{id} path’i için devreye girecektir, onun için ayrıca özel bir path tanımlaması yoktur. @GET işretlenmiş ikinci metot ise /address path’i ile işaretlenmiştir ve /customers/{id}/address şeklindeki path’e gelen isteği karşılayacaktır.

package resource;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

public class Customer {
	public Customer(String id,String name,String surname,String address){
		this.id = id;
		this.name = name;
		this.surname = surname;
		this.address = address;
	}
	
	public Customer(){
		
	}
	
	String id;
	String name;
	String surname;
	String 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;
	}
	
	@GET
	public String get(){
		return getId()+" "+getName()+" "+ getSurname();
	}

	@Path("/address")
	@GET
	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}	
}

Ekran Görüntüleri

Şimdi ekran çıktılarına bakalım:

http://localhost:8080/RestEasyTutorials/restService/ResourceLocatorAndSubResource/customers/2/ url’ine gidiyorum. Gördüğünüz gibi @GET ile işaretlenmiş birinci metot çalıştı.

Şimdi http://localhost:8080/RestEasyTutorials/restService/ResourceLocatorAndSubResource/customers/1/address adresine gidiyorum. @GET ile işaretli ikinci metot çalıştı ve 1 id’li kaydın adres bilgisi bana döndü.

Bu yazıda anlatacaklarım bu kadar arkadaşlar. Gelecek yazıda görüşene kadar sağlıcakla kalın.

SELAM VE SEVGİLERİMLE