我的应用程序提供RESTful接口来执行某些操作。我正在使用ExceptionMapper
来捕获NoResultException
或EntityNotFoundException
等异常,然后返回状态代码404或NumberFormatException
或ConstraintViolationException
等异常并返回状态代码为400 ......等。
我的问题是ExceptionMapper
只允许我每次选择一种例外;因此我不能对所有错误400使用相同的类,而其他形式的所有错误404。
有没有办法创建一个映射两种不同异常的ExceptionMapper
?
我的另一个选择是更改我的函数以返回Response而不是String(标记为@Produces("application/json"));
,然后每次都设置状态代码;但我认为这是最糟糕的......
答案 0 :(得分:4)
您可以针对异常超类(即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...
}
}
}
但在我看来,这并不像为每种类型的异常编写单独的映射器一样干净。首先,这个映射器将捕获所有异常,而对于另一个异常,这个类可能会随着时间的推移而变得难以处理。也许这是代码风格的问题。