我有一个 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");