Je suis nouveau dans ce domaine, j'essaie de lire certains documents, mais cela ne fonctionne pas, veuillez être patient.
J'ai créé un UserNotFoundMapper
en utilisant ExceptionMappers
comme ceci:
public class UserNotFoundMapper implements ExceptionMapper<UserNotFoundException> {
@Override
public Response toResponse(UserNotFoundException ex) {
return Response.status(404).entity(ex.getMessage()).type("text/plain").build();
}
}
Ceci à mon service:
@GET
@Path("/user")
public Response getUser(@QueryParam("id") String id) throws UserNotFoundException{
//Some user validation code with DB hit, if not found then
throw new UserNotFoundException();
}
UserNotFoundException
est un User-Defined
Exception.
J'ai essayé ceci:
public class UserNotFoundException extends Exception {
//SOME block of code
}
Mais lorsque j'appelle le service, le UserDefinedExceptionMapper
n'est pas appelé. Il semble que je manque peut-être quelque chose dans le UserDefinedException
. Comment définir cette exception alors?
Veuillez me faire savoir comment définir le UserNotFoundException
.
Vous devez annoter votre mappeur d'exceptions avec @Provider
, sinon il ne sera jamais enregistré avec le runtime JAX-RS.
@Provider
public class UserNotFoundMapper implements
ExceptionMapper<UserNotFoundException> {
@Override
public Response toResponse(UserNotFoundException ex) {
return Response.status(404).entity(ex.getMessage()).type("text/plain")
.build();
}
}
Ce que je fais habituellement lors de la création d'API est de créer ma propre exception qui s'étend de RuntimeException donc je n'ai pas nécessairement à intercepter mon exception.
Voici un exemple:
[~ # ~] note [~ # ~] : j'utilise JAX-RS avec Jersey
Tout d'abord : créer ma propre exception qui s'étend de RuntimeException.
public class ExceptionName extends RuntimeException {
private int code;
private String message;
public int getCode(){
return code;
}
public String getMessage(){
return message;
}
public ExceptionName(int code, String message) {
this.code = code;
this.message = message;
}
}
Implémentez également un ExceptionMapper
@Provider
public class ExceptionName implements ExceptionMapper<ExceptionName>{
@Override
public Response toResponse(ExceptionName exception) {
return Response.status(exception.getCode()).entity(exception.getMessage()).build();
}
}
Et chaque fois que je veux lever une exception, je le fais comme ça n'importe où, le mappeur d'exceptions se charge de renvoyer une réponse au client consommant l'API
throw new ExceptionName(500,"there was an error with something here");