Hallo,
ich bin mir nicht so sicher, wie ich das Exception Handling bei einem Webservice aufbauen möchte.
Generell möchte ich ja die Response Code zurückgeben.
Wenn zum Beispiel keine Daten gefunden werden, brauche ich keinen Stacktrace in meinem Server, lediglich der Client benötigt dann eben den entsprechenden Reponse Code...
Also sowas wie:
Meine Google Recherche hat ergeben, dass ich auch so die Exceptions schmeißen kann:
Und dann im Webservice hier schmeißen:
Das läuft ja auch alles.
Nur was ich dann habe ist, dass ich einen Stacktrace in meinem Webserver bekomme. Aber eigentlich brauche ich nur den Reponse Code.
Wie baue ich das richtig?
ich bin mir nicht so sicher, wie ich das Exception Handling bei einem Webservice aufbauen möchte.
Generell möchte ich ja die Response Code zurückgeben.
Wenn zum Beispiel keine Daten gefunden werden, brauche ich keinen Stacktrace in meinem Server, lediglich der Client benötigt dann eben den entsprechenden Reponse Code...
Also sowas wie:
Java:
ErrorMessage errorMessage = new ErrorMessage("No Customer found", Status.NOT_FOUND.getStatusCode());
return Response.status(Status.NOT_FOUND).entity(errorMessage).type(MediaType.APPLICATION_JSON)
.build();
Meine Google Recherche hat ergeben, dass ich auch so die Exceptions schmeißen kann:
Java:
public class DataNotFoundException extends WebApplicationException {
private static final long serialVersionUID = 5482195260668796087L;
public DataNotFoundException() {
}
public DataNotFoundException(String message) {
super(message);
}
}
Java:
@Provider
public class DataNotFoundExceptionMapper implements ExceptionMapper<DataNotFoundException> {
@Override
public Response toResponse(DataNotFoundException ex) {
ErrorMessage errorMessage = new ErrorMessage(ex.getMessage(), Status.NOT_FOUND.getStatusCode());
return Response.status(Status.NOT_FOUND).entity(errorMessage)
.build();
}
}
Und dann im Webservice hier schmeißen:
Java:
@GET
@Path("/{id}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response findById(@PathParam("id") Long id) {
Customer customer = customerService.findCustomerById(id);
if(customer == null)
throw new DataNotFoundException();
return Response.ok(customer, MediaType.APPLICATION_JSON)
.build();
return Response.ok().build();
}
Das läuft ja auch alles.
Nur was ich dann habe ist, dass ich einen Stacktrace in meinem Webserver bekomme. Aber eigentlich brauche ich nur den Reponse Code.
Wie baue ich das richtig?