MultiException, wenn benutzerdefinierte jersey param wirft exception

HINWEIS: Alle code, um dieses problem zu reproduzieren ist erhältlich bei https://gist.github.com/SrikanthRao/c9fc35e6fe22a74ab40c

http://localhost:8080/date/bean?date=2014-13-23 (mit BeanParam) produziert
"{"- code":500,"message":"Es war ein Fehler bei der Bearbeitung Ihrer Anfrage. Es wurde protokolliert (ID 48be9aa43bd49547)."}" ohne Zugabe MultiExceptionMapper nach jersey.

Wenn ich MultiExceptionMapper jersey, die über die url-Ergebnisse in

"Datum ist entweder nicht in YYYY-MM-DD format oder ist ungültig"

http://localhost:8080/date?date=2014-13-23 (direct @QueryParam-parameter) produziert
"Das Datum ist entweder nicht in YYYY-MM-DD format oder ist ungültig"

Paar Fragen:

  1. Ist dies die richtige Art und Weise zu handhaben input-Validierung in einer saubereren Weg?
  2. Ich erwartet, dass dies funktioniert, ohne eigene MultiExceptionMapper. Nicht Jersey-support custom *Params innen ein POJO eingespritzt wird, wie @BeanParam in Ressource-Methoden?

Hier wird der stack-trace erzeugt, wenn Anforderung (ohne Zugabe MultiExceptionMapper jersey). Natürlich entfernt, lange Spuren. Lassen Sie mich wissen, wenn Sie brauchen, vollständige stack-trace.

    ERROR [2015-05-04 18:48:33,366] io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a request: 0f23e4de758653d6
    ! javax.ws.rs.WebApplicationException: HTTP 400 Bad Request
    ! at io.dropwizard.jersey.params.AbstractParam.<init>(AbstractParam.java:28) ~[dropwizard-jersey-0.8.1.jar:0.8.1]
    ! at com.fun.myapp.LocalDateTimeParam.<init>(LocalDateTimeParam.java:20) ~[classes/:na]
    ! at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_45]
...
...
Causing: org.glassfish.hk2.api.MultiException: A MultiException has 3 exceptions.  They are:
! 1. javax.ws.rs.WebApplicationException: HTTP 400 Bad Request
! 2. java.lang.IllegalArgumentException: While attempting to resolve the dependencies of com.fun.myapp.PaginationFilters errors were found
! 3. java.lang.IllegalStateException: Unable to perform operation: resolve on com.fun.myapp.PaginationFilters
! 
! at org.jvnet.hk2.internal.Collector.throwIfErrors(Collector.java:88) ~[hk2-locator-2.4.0-b10.jar:na]
! at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:252) ~[hk2-locator-2.4.0-b10.jar:na]
! at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:360) ~[hk2-locator-2.4.0-b10.jar:na]
! at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471) ~[hk2-locator-2.4.0-b10.jar:na]
....
....
WARN  [2015-05-04 18:48:33,401] org.glassfish.jersey.internal.Errors: The following warnings have been detected: WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 3
javax.ws.rs.WebApplicationException: HTTP 400 Bad Request
    at io.dropwizard.jersey.params.AbstractParam.<init>(AbstractParam.java:28)
    at com.fun.myapp.LocalDateTimeParam.<init>(LocalDateTimeParam.java:20)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
...
...
MultiException stack 2 of 3
java.lang.IllegalArgumentException: While attempting to resolve the dependencies of com.fun.myapp.PaginationFilters errors were found
    at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:249)
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:360)
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)
...
...
MultiException stack 3 of 3
java.lang.IllegalStateException: Unable to perform operation: resolve on com.fun.myapp.PaginationFilters
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:389)
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)
    at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:162)

Ich habe diese Frage gestellt, auf die dropwizard-Nutzer die google-Gruppe - https://groups.google.com/forum/#!Thema/dropwizard-user - /yW-RXSSlspY

  • Haben Sie implementiert den code entsprechend an : // gibt gültige Antwort Objekt hier.
  • ein weiterer Punkt. Die Ausnahme beschwert sich über die Klasse com.Spaß.persönlichen.Finanzen.params.PaginationFilters. Können Sie überprüfen, ob es einen öffentlichen Konstruktor?
  • Ja, das habe ich umsetzen Rücksendung richtige Antwort. lassen Sie mich update-post, damit es einfacher zu verstehen. Eine weitere Sache ist, dass ich geändert-Klassen hier nicht kopieren, alles, was ich habe. die stacktrace-bezieht unterschiedliche Namen. Die Festsetzung es. Es ist ein Konstruktor ohne Argumente.
  • der code: return Response.serverError(); nicht kompilieren bei mir. Ich hatte zum Anhängen einer .build(). Außerdem, @NoArgsConstructor ist nicht einer dropwizard-annotation. Wo hast du es bekommen? Btw, bei der Verwendung von LocalDateTimeParam als parameter der error-Methode funktionierte gut für mich. Das Problem scheint im Zusammenhang mit der Verpackung in PaginationFilters. Können Sie den code mit es so thant ich kann Ihr problem reproduzieren?
  • Ich verstehe es nicht. Heißt das, dass problem behoben ist? Und du postest das problem Ausnahme vor, um zu reparieren, und alles, was Sie wissen wollen ist, ob die ExceptionMapper ist die richtige Lösung?
  • Sorry für die Unklarheit. AFAIU,Ihre Anforderung ist, um die Reaktion von LocalDateTimeParam-error " - Methode, wenn die Eingabe falsch ist. Als ein Anfang, ich habe Ihre LocalDateTimeParam als einen parameter einer Methode. wenn ich den pass ungültiges Datums-format, bekomme ich die Antwort von LocalDateTimeParam. Also es ist kein bug in dropwizard im Zusammenhang mit dem aufrufen der Fehler-Methode. Als Nächstes würde ich gerne testen, wenn LocalDateTimeParam ist ein Feld von PaginationFilters und der parameter PaginationFilters. In der gleichen Bedingungen, dann sind Sie, ich brauche, um zu sehen, wie Sie injiziert in die Ressource-Methode mit der @BeanParam.Können Sie beweisen, dass code
  • Aktualisierte post Ihre Fragen zu klären. Code Hinzugefügt, um zu reproduzieren.
  • Aktualisierte Frage zu klären Ihre Fragen. Ich fixierte es mit eigener exception-mapper.
  • Hast du jemals eine Lösung finden? Ich bin mit dem gleichen Problem. Ich habe eine BeanParam, wo eines der Mitglieder hat eine ParamConverter

InformationsquelleAutor Srikanth | 2015-04-29
Schreibe einen Kommentar