【发布时间】:2015-07-09 06:04:58
【问题描述】:
注意:所有重现此问题的代码都可以在https://gist.github.com/SrikanthRao/c9fc35e6fe22a74ab40c获得
http://localhost:8080/date/bean?date=2014-13-23(使用 BeanParam)产生 "{"code":500,"message":"处理您的请求时出错。它已被记录 (ID 48be9aa43bd49547)."}" 而没有将 MultiExceptionMapper 添加到球衣。
如果我将 MultiExceptionMapper 添加到球衣,上面的 url 会导致
“日期不是 YYYY-MM-DD 格式或无效”
http://localhost:8080/date?date=2014-13-23(直接@QueryParam 参数)产生 "日期不是 YYYY-MM-DD 格式或无效"
几个问题:
- 这是以更简洁的方式处理输入验证的正确方法吗?
- 我希望这无需添加我自己的 MultiExceptionMapper 即可工作。 Jersey 不支持在资源方法中作为 @BeanParam 注入的 POJO 中的自定义 *Params 吗?
这是请求时产生的堆栈跟踪(不向球衣添加 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)
我在 dropwizard-user google group 上问过这个问题 - https://groups.google.com/forum/#!topic/dropwizard-user/yW-RXSSlspY
【问题讨论】:
-
你是否实现了对应的代码: // 这里返回有效的Response对象。
-
另一点。异常抱怨类 com.fun.personal.finance.params.PaginationFilters。你能检查它是否有一个公共构造函数吗?
-
是的,我确实实现了返回正确的响应。让我更新帖子,这样更容易理解。还有一件事是我在这里改变了课程,而不是复制我所拥有的一切。堆栈跟踪引用了不同的名称。修复它。没有 args 构造函数。
-
代码:return Response.serverError();没有为我编译。我不得不附加一个 .build()。此外,@NoArgsConstructor 不是 dropwizard 注释。你在哪里得到它?顺便说一句,当使用 LocalDateTimeParam 作为参数时,错误方法对我来说效果很好。该问题似乎与 PaginationFilters 中的包装有关。您能否提供使用它的代码,以便我可以重现您的问题?
-
我不明白。你说这个问题解决了吗?而且您在修复之前发布了问题异常,您只想知道 ExceptionMapper 是否是正确的修复?
标签: java jax-rs jersey-2.0 dropwizard