IAm*_*aja 3 java rest error-handling jax-rs jersey
我正在使用Jersey / JAX-RS来实现RESTful Web服务。我对ExceptionMapper接口有疑问,似乎在任何地方都没有记录。
假设我有以下自定义(extend RuntimeException)异常:
FizzException extends RuntimeExceptionBuzzException extends FizzException现在,让我们说我的异常映射器执行以下Exception到Response映射的映射:
FizzException 实际上映射到未找到的HTTP 404BuzzException 映射到HTTP 403 UNAUTHORIZED因此,如果我正确理解API,则需要实现3个不同的异常映射器:
@Provider
public class DefaultExceptionMapper implements ExceptionMapper<Exception> {
@Override
Response toResponse(Exception exc) {
// Map to HTTP 500
}
}
@Provider
public class FizzExceptionMapper implements ExceptionMapper<FizzException> {
@Override
Response toResponse(Exception exc) {
// Map to HTTP 404
}
}
@Provider
public class BuzzExceptionMapper implements ExceptionMapper<BuzzException> {
@Override
Response toResponse(Exception exc) {
// Map to HTTP 403
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这使我感到好奇:由于我们正在进行异常类继承,因此实际上将触发哪些映射器?例如:
BuzzException延伸FizzException,最终延伸Exception。所以,如果一个BuzzException被抛出,其中映射器会火:BuzzExceptionMapper,FizzExceptionMapper或DefaultExceptionMapper?Exception被抛出,因为BuzzException是最终的Exception,这映射火灾:BuzzExceptionMapper,FizzExceptionMapper或DefaultExceptionMapper?小智 5
最具体的异常映射器将被调用。
因此,在您的情况下:
BuzzException 将被映射 BuzzExceptionMapper FizzException 将被映射 FizzExceptionMapperException将被映射DefaultExceptionMapper| 归档时间: |
|
| 查看次数: |
679 次 |
| 最近记录: |