【发布时间】:2014-08-14 07:49:49
【问题描述】:
我有一个 Web 应用程序,我在其中抛出了一些自定义异常(使用 @ApplicationException 注释的应用程序异常),并且每个都有一个异常映射器(使用 @Provider 注释的提供程序)。最近我忘记用 @ApplicationException 注释异常,但映射器仍然能够识别异常并正确格式化响应。
然后我检查了文档,我了解到注解默认会被其子类继承。所以我从超类中删除了注释并进行了检查。映射器仍然识别出异常并格式化响应。
然后我甚至向前尝试抛出java.lang.IllegalArgumentException 并为它编写了一个映射器类。它也正常工作。 javax.ws.rs.ext.ExceptionMapper 是否与抛出的异常无关。会不会检查抛出的异常是否真的被@ApplicationException注解了?
@Provider
public class IllegalArgumentExceptionMapper implements ExceptionMapper<java.lang.IllegalArgumentException> {
@Override
public Response toResponse(java.lang.IllegalArgumentException exception) {
return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build();
}
}
在我的服务类中的某个地方:
throw new java.lang.IllegalArgumentException("Problem with the payload. Please check the payload you are sending");
【问题讨论】:
-
@ApplicationException 是专有注释还是众所周知的?找不到这样的东西
-
这是 javax.ejb api 中众所周知的注解。
-
+ 你能提供你的 ExceptionMapper 代码吗?
-
@shlomi33 我更新了帖子。
-
所以我可能不明白@ApplicationException 与这里的整个问题有什么关系。能再解释一下吗?
标签: java jakarta-ee ejb-3.0 java-ws