我的应用程序提供RESTful接口来执行某些操作.我使用ExceptionMapper捕捉象异常NoResultException或EntityNotFoundException然后返回404状态码,或类似的异常NumberFormatException或ConstraintViolationException并返回400的状态码...等等.
我的问题是,ExceptionMapper每次只允许我选择一种例外; 所以我不能对所有错误400使用相同的类,而其他形式的所有错误404.
有没有办法创建一个ExceptionMapper映射两种不同类型的异常?
我的另一个选择是更改我的函数以返回一个Response而不是一个String(标记为@Produces("application/json"));,然后每次都设置状态代码;但我认为这是最糟糕的......
您可以针对异常超类(即java.lang.Exception)编写单个 ExceptionMapper ,然后根据特定的异常类提供不同的行为,例如:
public class MyExceptionMapper implements ExceptionMapper<Exception> {
@Override
public Response toResponse(Exception exception) {
if (exception instanceof EntityNotFoundException) {
...
}
else (exception instanceof NumberFormatException) {
...
}
else {
// The catch-all handler...
}
}
}
Run Code Online (Sandbox Code Playgroud)
但在我看来,这不像为每种类型的异常编写单独的映射器那么干净。一方面,这个映射器将捕获所有异常,另一方面,随着时间的推移,这个类可能会增长到难以处理的维度。也许这是代码风格的问题。
| 归档时间: |
|
| 查看次数: |
2743 次 |
| 最近记录: |