我有一个ExceptionMapper
as a@Provider
来处理我的所有异常。
所以很明显,我的类实现了ExceptionMapper<Throwable>
,我们知道,所有异常都Throwable
以某种方式扩展。
现在我使用 jax-rs@NotNull
检查我的资源输入值是否不为空,并且通过一些搜索,我意识到ConstraintViolationException
当带注释的字段为空时它会抛出。
所以我尝试在我的 ExceptionMapper 中处理它并添加一些细节来响应(添加一些自定义 json 模型),如下所示:
@Provider
public class AllExceptionMapper implements ExceptionMapper<Throwable> {
private final Logger logger = LogManager.getLogger(AllExceptionMapper.class);
@Override
public Response toResponse(Throwable ex) {
Response response;
CustomError error;
// handle some errors
else if (ex instanceof ConstraintViolationException) {
error = new CustomError(
324, // predefined error type in our documents
"some details"
);
response = Response.status(Response.Status.BAD_REQUEST).entity(error).build();
}
// handle some other errors
return response;
}
}
问题是这不起作用,但如果我要创建另一个ExceptionMapper<ConstraintViolationException>
在那里实现和处理它的异常映射器提供程序,它可以正常工作。
正如我之前所说(并且也检查过)所有异常都Throwable
以某种方式从类扩展,所以我错过了什么以及为什么它不起作用?
……
没有用,我的意思是它忽略了我的映射器(从 实现的那个ExceptionMapper<Throwable>
)并且具有正常行为,即返回状态代码 400 没有响应有效负载,就像根本没有映射器一样