JAX RS – 27 – Exception Mapping & Exception Hierarchy
Merhaba Arkadaslar,
Bu bolumde JAX-RS exception konusuna devam ediyoruz.
Exception Mapping
ExceptionMapper.java
javax.ws.rs.ext paketinde ExceptionMapper arabirimi yer almaktadir.
ExceptionMappers are custom, application provided, components that can catch thrown application exceptions and write specific HTTP responses. The are classes annotated with @Provider and that implement this interface
package javax.ws.rs.ext; public interface ExceptionMapper<E extends Throwable> { Response toResponse(E exception); }
ExceptionMapper implementation sinifinda @Provider annotation’ini kullanilmalidir.
Oncelikle yeni bir Exception sinifi tanimlayalim.
CustomerNotFoundException.java
package _20.exception.mapper.service; public class CustomerNotFoundException extends RuntimeException { private static final long serialVersionUID = 1L; public CustomerNotFoundException(String message) { super(message); } }
CustomerResource.java
Kodumuzu inceleyelim , dikkat edecek olursak CustomerNotFoundException firlatiyoruz.
package _20.exception.mapper.service; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import _19.exception.model.Customer; import _19.exception.service.CustomerService; @Path("/customer-exception-mapper") public class CustomerResource { @GET @Path("/customer/{id}") public Customer getCustomer(@PathParam("id") int id) { CustomerService service = new CustomerService(); Customer customer = service.findCustomer(id); if (customer == null) { throw new CustomerNotFoundException("Could not find customer id : " + id); } return customer; } }
NotFoundExceptionMapper.java
NotFoundExceptionMapper sinifimiz , ExceptionMapper arabirimini uygulayacak.
toResponse metodunu override edelim. Response objemizi ilgili sekilde ayarliyoruz ve geriye donuyoruz.
package _20.exception.mapper.service; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.ext.ExceptionMapper; import javax.ws.rs.ext.Provider; @Provider public class NotFoundExceptionMapper implements ExceptionMapper<CustomerNotFoundException> { @Override public Response toResponse(CustomerNotFoundException exception) { ResponseBuilder builder = Response.status(Response.Status.NOT_FOUND); builder.entity(exception.getMessage()); builder.type(MediaType.TEXT_PLAIN); return builder.build(); } }
Ornegimizi calistiralim ;
http://localhost:8080/injavawetrust.resteasy.tutorial/customer-exception-mapper/customer/1 http://localhost:8080/injavawetrust.jersey.tutorial/customer-exception-mapper/customer/1
Exception Hierarchy
JAX-RS 2.0’da , HTTP error durumlarina karsilik exception siniflari yer almaktadir. WebApplicationException objesi’ni ilgili status code’la olusturmak yerine bu tanimli siniflari kullanabiliriz.
Tabloyu inceleyecek olursak ilgili Status Code’lara karsilik siniflari gorebiliriz;
CustomerResource.java
package _21.exception.hierarchy.service; import javax.ws.rs.GET; import javax.ws.rs.NotFoundException; import javax.ws.rs.NotSupportedException; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.ServiceUnavailableException; import _19.exception.model.Customer; import _19.exception.service.CustomerService; @Path("/customer-exception-hierarchy") public class CustomerResource { @GET @Path("/customer/{id}") public Customer getCustomer(@PathParam("id") int id) { System.out.println("getCustomer is called."); CustomerService service = new CustomerService(); Customer customer = service.findCustomer(id); if (customer == null) { throw new NotFoundException(); } return customer; } @GET @Path("/name/{id}") public String getCustomerName(@PathParam("id") int id) { System.out.println("getCustomerName is called..."); // // throw new NotSupportedException(); } @GET @Path("/address/{id}") public String getCustomerAddress(@PathParam("id") int id) { System.out.println("getCustomerAddress is called..."); /// /// throw new ServiceUnavailableException(); } }
Ornegimizi calistirdigimizda ;
http://localhost:8080/injavawetrust.jersey.tutorial/customer-exception-hierarchy/customer/1 http://localhost:8080/injavawetrust.resteasy.tutorial/customer-exception-hierarchy/customer/1 http://localhost:8080/injavawetrust.jersey.tutorial/customer-exception-hierarchy/name/1 http://localhost:8080/injavawetrust.resteasy.tutorial/customer-exception-hierarchy/name/1 http://localhost:8080/injavawetrust.resteasy.tutorial/customer-exception-hierarchy/address/1 http://localhost:8080/injavawetrust.jersey.tutorial/customer-exception-hierarchy/address/1
Ornek olarak ;
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