JAX RS – 34 – javax.ws.rs.core.UriBuilder

Merhaba Arkadaslar
Bu bolumde javax.ws.rs.core.UriBuilder abstract sinifini inceleyecegiz.

javax.ws.rs.core.UriBuilder
javax.ws.rs.core.UriBuilder sinifini , esnek/flexible sekidle URI olusturmak icin kullanabiliriz.

The UriBuilder class allows you to construct a URI piece by piece 
and is also sensitive to template parameters:

UriBuilder bir abstract class’tir. Bazi metotlarina bakacak olursak ;

public abstract class UriBuilder {
    public static UriBuilder fromUri(URI uri) throws IllegalArgumentException

    public static UriBuilder fromUri(String uri) throws IllegalArgumentException

    public static UriBuilder fromPath(String path) throws IllegalArgumentException

    public static UriBuilder fromResource(Class<?> resource) throws IllegalArgumentException

    public static UriBuilder fromLink(Link link) throws IllegalArgumentException
..
..
}

UriBuilder objesini static yardimci metotlar ile olusturabiliriz. (Tabi ki Javada abstract siniflardan obje olusmaz , burada UriBuilder objesinden kastimiz extends eden subclass objesi)

package _26.uriBuilder.service;

import java.net.URI;
import java.util.HashMap;
import java.util.Map;

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

@Path("/uriBuilder-path")
public class UriBuilderResource {

	@GET
	@Path("/test1")
	public String test1UriBuilder() {

		UriBuilder builder = UriBuilder.fromPath("/customers/{id}");
		builder.scheme("http")
		.host("example.com")
		.resolveTemplate("id", "100")
		.queryParam("myParam", "myValue");

		URI uri = builder.build();
		return uri.toString();
	}

	@GET
	@Path("/test2")
	public String test2UriBuilder() {

		UriBuilder builder = UriBuilder.fromPath("/customers/{id}");
		builder.scheme("http")
		.host("{hostname}")
		.queryParam("{queryParam}", "{queryValue}");

		URI uri = builder.build("example.com", "100", "myParam", "myValue");
		return uri.toString();
	}

	@GET
	@Path("/test3")
	public String test3UriBuilder() {

		UriBuilder builder = UriBuilder.fromPath("/customers/{id}");
		builder.scheme("http")
                .host("{hostname}")
                .queryParam("{queryParam}", "{queryValue}");

		Map<String, String> map = new HashMap<String, String>();
		map.put("hostname", "example.com");
		map.put("id", "100");
		map.put("queryParam", "myParam");
		map.put("queryValue", "myValue");

		URI uri = builder.buildFromMap(map);
		return uri.toString();
	}

}

Ornek kodumuzu inceleyelim…
test1UriBuilder metoduna bakacak olursak ;

Ilk olarak UriBuilder#fromPath metodu ile URI olusturmaya baslayalim.

UriBuilder builder = UriBuilder.fromPath("/customers/{id}");
  • UriBuilder#scheme metodu http protokol bilgisi
  • UriBuilder#host metodu ile host bilgisi
  • UriBuilder#resolveTemplate metodu ile {id} yerine path param bilgisi veriyoruz.
  • UriBuilder#queryParam metodu ile query parameter ve value ekliyoruz.
  • Sonrasinda build metodu geriye URI donmekte ve son olarak test amacli String degerini donuyoruz.

test2UriBuilder metoduna bakacak olursak ;
Parametreleri {} arasinda tanimlayabiliriz ve sonrasinda build metodunda bu parametreler sirasiyla ilgili yerlere eklenecektir.

test3UriBuilder metoduna bakcak olursak ;
paremetreleri key/value cifti seklinde bir HashMap’e ekledik ve sonrasinda buildFromMap metodunu kullaniyoruz.

Her 3 ornekte ayni ciktiyi/degeri olusturacaktir.

http://localhost:8080/injavawetrust.jersey.tutorial/uriBuilder-path/test1
http://localhost:8080/injavawetrust.resteasy.tutorial/uriBuilder-path/test1

http://localhost:8080/injavawetrust.jersey.tutorial/uriBuilder-path/test2
http://localhost:8080/injavawetrust.resteasy.tutorial/uriBuilder-path/test2

http://localhost:8080/injavawetrust.jersey.tutorial/uriBuilder-path/test3
http://localhost:8080/injavawetrust.resteasy.tutorial/uriBuilder-path/test3

Bir baskamediumek olarak UriBuilder#fromResource metodunu kullanabiliriz. Bunun icin yeni bir CustomerResource sinifi ekleyelim.

CustomerResource.java

package _26.uriBuilder.service;

import javax.ws.rs.Path;

@Path("/customer-uriBuilder")
public class CustomerResource {

	@Path("/customer")
	public String getCustomer() {
		return "CustomerResource#getCustomer";
	}
}

UriBuilderResource.java

package _26.uriBuilder.service;
////
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.UriBuilder;

@Path("/uriBuilder-path")
public class UriBuilderResource {
////	
	@GET
	@Path("/test4")
	public String test4UriBuilder() {

		UriBuilder builder = UriBuilder.fromResource(CustomerResource.class);
		builder.path(CustomerResource.class,"getCustomer");
		
                return builder.build().toString();
		
	}

}

UriBuilderResource sinifinda yeni bir test metodu ekledik.
UriBuilder#fromResource metodunda Class literali olarak CustomerResource.class degerini verelim.
Sonrasinda “getCustomer” metodunu verelim.
Boylece path bilgisini olustururken CustomerResource sinifindan ve getCustomer metodundan yararlaniyoruz.

Github kaynak kodlar / source folder
injavawetrust.resteasy
injavawetrust.jersey

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *