【发布时间】:2019-04-03 10:13:57
【问题描述】:
我有一个ExceptionMapper 作为@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 且没有响应负载的正常行为,就像根本没有映射器一样
【问题讨论】:
-
这不起作用是什么意思?目前的行为是什么?
-
@SBylemans 它忽略了我的映射器(实现
Throwable的映射器)并且表现正常,就像根本没有映射器一样 -
不确定是什么原因造成的,但也许已经有一个内置映射器使用继承树中较低的泛型类实现
ExceptionMapper? -
@SBylemans 在继承树中是否有任何低于
Throwable的异常情况? -
@SBylemans 我不知道它是否有用,但我正在使用
spring-boot-starter-jersey
标签: java jersey exceptionmapper