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
Leave a Reply