7,540
edits
Changes
→Hibakezelés
==Hibakezelés==
===Egyedi Response objektum exception kezelésselÁttekintés===
Ez egy sarkalatos pontja a REST interfész implementációnak, ugyanis a kliensnek minden esetben vissza kell adni egy szabványos REST választ, ahol hiba esetén lehetőleg megmondjuk, hogy mi történt, tehát minden hibát le kell valahogy kezelni. Úgy fogjuk megoldani, hogy hiba esetén egyedi response objektumot dobjuk, hogy hiba esetén egy saját Exception-t dobunk, amit egy Exception provider-el feldolgozunk, és egyedi hiba objektumot készítünk belőle a válaszba.
# Exception provider osztály, ami megkapja a vezérlést ha WebServiceException dobódott, és a benne található információk alapján példányosítja a ErrorResponse osztályt, majd beleteszi a REST válaszba, amit a JAX-RS JSON formátumra fog hozni.
<br>===Jax-RS providertípusok===
A JAX-RS-ben 3 típusa létezik a provider-ekenek, melyekkel három különféle feladatot láthatunk el:
Elsőként definiáljuk azt az osztályt ami alapján a nem NEM 200-as státusz esetén a válasz objektumot létre akarjuk hozni. Létrehoztunk egy Facory metódust is a JSON<->JAVA konverzióra, amit '''@JsonCreator''' annotációval láttunk el (a metódusnak az 'of' nevet adtuk). A '''@JsonProperty'''-val megadtuk az egyez mezők JSON nevét és Jáva típusát.
<source lang="java">
import com.fasterxml.jackson.annotation.JsonCreator;
Hozzunk létre egy egyedi Exception implementációt, amit minden kezelt hiba estén mi fogunk dobni a webservice metódusok belsejében. Ezt az exception-t fogja elkapni a mapper osztályunk, és alakítja majd át ErrorMessageResponse objektumra.Az exception-t származtassuk le az IllegalArgumentException-böl, és a konstruktorban töltsük ki az ős konstruktorát is.
<source lang="java">
public class WebServiceException extends IllegalArgumentException {
És végezetül nézzük meg az Exception provider osztályt aminek implementálni kell a ExceptionMapper<T> interfészt és a toResponse metódust, amivel az Exception alapján előállítjuk a mapper osztálytválasz objektomt.
<source lang="java">
import javax.ws.rs.core.MediaType;
@Override
public Response toResponse(WebServiceException exception) {
return Response.status(exception.getStatus())
.entity(exception.getErrorMessageResponse()emr)
.type(MediaType.APPLICATION_JSON).
build();
}
}
</source>
Használata:
<source lang="java">
</source>