JAX RS – 10 – PathSegment & @MatrixParam

Merhaba Arkadaslar
Bu bolumde PathSegment ve @MatrixParam annotation’ini inceleyecegiz.

Matrix parametreleri URI da yer alir genel formati ;

.../path/matrixParam=value; matrixParam2=value2 ; matrixParam3=value3

javax.ws.rs.core.PathSegment

@PathParam can not only inject the value of a path parameter, 
it can also inject instances of javax.ws.rs.core.PathSegment.
package javax.ws.rs.core;
public interface PathSegment
{
	String getPath();
	MultivaluedMap<String, String> getMatrixParameters();
}

CarResource.java

package _03.pathSegment.service;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.PathSegment;

@Path("/car-pathSegment")
public class CarResource {

	@GET
	@Path("/car/{search : criteria}")
	public String getCar(@PathParam("search") PathSegment pathSegment) {
		String brand = pathSegment.getMatrixParameters().getFirst("brand");
		List<String> colors = pathSegment.getMatrixParameters().get("color");
		String message = "getCar is called.<br/>";
		return message + "Brand : " + brand + " , Color :  " + colors;

	}
}

Ornegimizi calistiralim ;

http://localhost:8080/injavawetrust.jersey.tutorial/car-pathSegment/car/criteria;brand=Mercedes;color=red;color=blue;
http://localhost:8080/injavawetrust.resteasy.tutorial/car-pathSegment/car/criteria;brand=Mercedes;color=red;color=blue;

URI adresini inceleyecek olursak ; car-pathSegment CarResource un Root adresi.
Sonrasinda /car ; getCar metodunu tanimlamaktadir.

Sonrasinda @PathParam tanimliyoruz ve regex olarak ismi criteria olsun dedik sadece /car/criteria adresi bu metodu cagirir! Dikkat edecek olursak bu @PathParam PathSegment tipinde.

Son olarak brand ve color matrix parametreleri tanimladik , dikkat edecek olursak color ‘i 2 kere tanimladik.

brand=Mercedes;color=red;color=blue;

Bu matrix parametrelerine ulasmak icin pathSegment.getMatrixParameters() metodunu kullanabiliriz.

MultivaluedMap<String, String> getMatrixParameters();

getFirst , get gibi metotlarla bu degerlere ulasabiliriz.

Bir baska ornek olarak ;

	@GET
	@Path("car/{model : .+}/year/{year}")

	public String getCarByYear(@PathParam("model") List<PathSegment> car, @PathParam("year") String year) {
		String message = "getCarByYear is called.<br/>";
		return message + "Properties : " + car + " , Year : " + year;
	}

Ornegimizi calistiralim ;

http://localhost:8080/injavawetrust.jersey.tutorial/car-pathSegment/car/mercedes/red/blue/year/2016
http://localhost:8080/injavawetrust.resteasy.tutorial/car-pathSegment/car/mercedes/red/blue/year/2016

@MatrixParam

PathSegment objesini kullanmak yerine @MatrixParam ile matrix parametrelerini direkt olarak inject edebiliriz. Bunun icin @javax.ws.rs.MatrixParam annotation’ini kullanmamiz gereklidir.

package _04.matrixParam.service;

import java.util.List;

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

@Path("/car-matrixParam")
public class CarResource {

	@GET
	@Path("/car")
	public String getCarWithMatrixParam(@MatrixParam("brand") String brand, 
			@MatrixParam("color") List<String> colors) {
		String message = "getCarWithMatrixParam is called.<br/>" + "Brand : " + brand + " Colors : " + colors;
		return message;

	}
}

Ornegimizi calistiralim ;

http://localhost:8080/injavawetrust.jersey.tutorial/car-matrixParam/car;brand=Mercedes;color=red;color=blue;
http://localhost:8080/injavawetrust.resteasy.tutorial/car-matrixParam/car;brand=Mercedes;color=red;color=blue;

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

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

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