Voglio catturare tutte le eccezioni inaspettate in un servizio di riposo in jersey. Quindi ho scritto un ExceptionMapper:Cattura tutte le eccezioni e restituisce anche gli errori personalizzati in Jersey
@Provider
public class ExceptionMapper implements javax.ws.rs.ext.ExceptionMapper<Exception> {
private static Logger logger = LogManager.getLogManager().getLogger(ExceptionMapper.class.getName());
@Override
public Response toResponse(Exception e) {
logger.log(Level.SEVERE, e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Internal error").type("text/plain").build();
}
}
Il mapper cattura davvero tutte le eccezioni. Quindi non posso scrivere:
public MyResult getById(@PathParam("id")) {
if (checkAnyThing) {
return new MyResult();
}
else {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
}
Questo è catturato dal Mapper. Ora devo scrivere:
public Response getById(@PathParam("id") {
if (checkAnyThing) { {
return Response.ok().entity(new MyResult()).build();
}
else {
return Response.status(Response.Status.NOT_FOUND).build();
}
}
E 'questo il modo corretto per catturare tutte le eccezioni inaspettati e anche restituire errori (codici di errore) in jersey? O c'è qualche altro (più corretto) modo?
ottima risposta. +1 per il tavolo !!!! –