ПРИМЕЧАНИЕ. Весь код для воспроизведения этой проблемы можно найти в https://gist.github.com/SrikanthRao/c9fc35e6fe22a74ab40c
http://localhost:8080/date/bean?date=2014-13-23 (используя BeanParam) производит "{" code ": 500," message ":" Произошла ошибка обработки вашего запроса. Он был зарегистрирован (ID 48be9aa43bd49547). "}" Без добавления MultiExceptionMapper в трикотаж.
Если я добавлю MultiExceptionMapper в jersey, указанный выше URL-адрес приведет к
"Дата либо не в формате ГГГГ-ММ-ДД, либо недействительна"
http://localhost:8080/date?date=2014-13-23 (прямой параметр @QueryParam) производит "Дата не указана в формате ГГГГ-ММ-ДД или недействительна"
Пара вопросов:
- Является ли это правильным способом обработки ввода с помощью более чистого способа?
- Я ожидал, что это сработает без необходимости добавления моего собственного MultiExceptionMapper. Не поддерживает ли Джерси пользовательские * Парамы внутри POJO, которые вводятся как @BeanParam в методах ресурсов?
Вот трассировка стека, создаваемая при запросе (без добавления MultiExceptionMapper в трикотаж). Конечно, удалены длинные следы. Дайте мне знать, если вам нужна полная трассировка стека.
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)
Я задал этот вопрос в группе google-группы dropwizard - https://groups.google.com/forum/#!topic/dropwizard-user/yW-RXSSlspY