toResponse in jersey ExceptionMapper nicht aufgerufen
So, ich Baue eine web-Anwendung, wir verwenden JPA und Jersey zu konsumieren/produziert JSON-Daten.
Habe ich eine eigene "EntityException" sowie eine eigene "EntityExceptionMapper"
Hier ist der mapper:
@Provider
public class EntityExceptionMapper implements ExceptionMapper<EntityException> {
public EntityExceptionMapper() {
System.out.println("Mapper created");
}
@Override
public Response toResponse(EntityException e) {
System.out.println("This doesnt print!");
return Response.serverError().build();
}
}
Meine Ausnahme:
public class EntityException extends Exception implements Serializable{
public EntityException(String message) {
super(message);
System.out.println("This prints...");
}
}
Wird, und ich nenne es von einem REST-Aufruf:
@POST
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public String test() throws EntityException{
throw new EntityException("This needs to be send as response!!");
//return "test";
}
Mein problem ist, dass, wenn die obige exception geworfen wird, die ich im Konstruktor (Drucke: "Diese Drucke...") Edit: ich bekomme auch das: "Mapper erstellt!"
Aber meine Antwort ist leer, und ich nicht bekommen, um das sys aus meiner toResponse Methode. Das ist wirklich ähnlich wie das Beispiel auf dem Trikot website:
https://jersey.java.net/nonav/documentation/1.12/jax-rs.html#d4e435
Was bin ich??
- Nimmst du diese: "Mapper " erstellt" ? Vielleicht hat dein mapper wird nicht richtig erkannt. Senken Sie den logging level von jersey, um zu sehen, welche Klassen gescannt werden.
- Ja, ich bin immer die "Mapper " erstellt" (editiert, danke)
- Was bekommen Sie als Ergebnis? Sie sollten ein leeres 500 Antwort, basierend auf Ihren code.
- Wenn Sie javax.ws.rs.core.Antrag zur Registrierung von Ressourcen. Sie können hinzufügen, EntityExceptionMapper.class in Satz von resource-Typen. Etwas mag dieses: - Klassen.add(EntityExceptionMapper.class);
- Ich bekomme 204 no content (wie meine toResponse scheint nie genannt werden), nach Ihrem Kommentar Loc, ich habe versucht, mit etwas, das wäre bereits registriert ist (um zu sehen, ob es funktionieren würde) ich habe versucht, die Erweiterung WebApplicationException, und jetzt funktioniert es! Ich werde in entweder mit, dass als ein Typ für meine Ausnahme oder registrieren Sie meine eigenen. Ich denke, dies ist endlich gelöst! Vielen Dank.
- mit
classes.add(EntityExceptionMapper.class);
arbeitete für mich, vielen Dank@Provider
scheint nicht zu funktionieren
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mit der Bereitstellung Agnostiker Anwendung Modell so, dass Folgendes bei mir funktioniert:
Ich hatte ein ähnliches problem, wo die
ExceptionMapper
hatte die richtige@Provider
annotation und der rest des Codes war identisch mit Jersey ' s Beispiel aber immer noch nicht richtig registriert.Nun, es stellt sich heraus, ich musste manuell registrieren meine custom
ExceptionMapper
innerhalb meinerHttpServlet
mit der MethodeaddExceptionMapper
. Da es nun manuell registriert werden, die@Provider
Anmerkung kann sicher entfernt werden.Also mit den folgenden ExceptionMapper (ich bin Fang jeden
RuntimeException
zu rethrow Sie als 400)Ich hatte, um die 2. Zeile in meiner init :
Ich hatte das gleiche problem und konnte es beheben, indem Sie das Paket von meiner ExceptionMapper in jersey.config.server.Anbieter.Pakete in meinem web.xml Datei. Unten ist ein Ausschnitt aus meiner web.xml.
Ich hatte das gleiche Problem beim entwickeln Beispiel-REST-API. Während der Erstellung REST-API, ich habe base package-Namen org.manish.rest.Nachricht
Ich schaffen sollen, alle anderen Pakete, die unter dem Basis-Paket wie dieses
org.manish.rest.message.model
org.manish.rest.message.database
org.manish.rest.message.resource
in web.xml init-param gegeben wurde, wie dies
Es bedeutet, ich habe mich registriert, mein base-Paket im web.xml, was auch immer Paket erstelle ich unter dieser; wird betrachten von JAX-RS basiert auf meinen Aufruf und Forderung. Aber wenn ich meinen Ausnahme-Paket durch die Fehler, die ich gestellt package-Namen org.manish.rest.Ausnahme. Da dies nicht registriert web.xml also meine komplette exception-Klasse wurde nicht berücksichtigt zu handhaben Ausnahme von JAX-RS.
Als eine Korrektur, ich habe gerade meine modifizierten Ausnahme-Paket-Namen aus
org.manish.rest.exception
zuorg.manish.rest.message.exception
Danach habe ich einmal ausgeführt, in der post-Mann und ich haben das erwartete Ergebnis.
Hoffen, diese lösen Ihre Abfrage.
Dank
Manish
Frühjahr, die ich verwendet, um Draht, jersey-app und verwendet @Komponente mit @Provider.
Als ich zog nach jersey mit v > 2.5, funktioniert es nicht mehr.
Ich beschloss, dass ich genau dieses Problem, indem Sie @Singleton-annotation statt @Komponente neben @ - Anbieter, wie diesem:
Ich bin mit dem Jersey
JdkHttpServerFactory
, und ich hatte, um dieExceptionMapper
Klasse als eine Ressource, genau wie meine anderen controller-Ressourcen:Versuchen zu registrieren, Ihre exception-mapper-Klasse in Ihrer X erstreckt ResourceConfig - Datei.
register(CustomExceptionMapper.class);
diese Linie wird helfen, die Anwendung zu finden, die mapper-Klasse und zurückgeben, was Sie geschrieben haben, innerhalb der toResponse Methode der mapper-Klasse
Ich bin immer noch mit jersey 1.17 , Frühlings-und jersy legalisiert-Frühling
@Component-annotation behebt dieses
Ich habe auch vor dem gleichen Problem.Fügen Sie einfach den Namen des Pakets, dass die ExceptionMappperHandler Klassen.
Hier,der service enthalten alle service-Klassen und Utilities.ExceptionMapper enthält alle exceptionMapper.
Hoffe, dass Ihr helfen
Ich hatte das gleiche problem. Ich hatte gerade zu ändern web.xml.
Zuvor in meinem web.xml Datei param-value war
com.two95.restful.resource
Ich habe gerade für root-Paket
com.two95.restful
. Dann fing es an zu arbeiten wie ein Charme mit nur@Provider
annotation.