少年击剑更吹箫,剑气箫心一例消。这篇文章主要讲述JAX-RS(泽西实现)ExceptionMapper 没有捕获ConstraintViolationException相关的知识,希望能为你提供帮助。
我有一个ExceptionMapper
作为Provider
来处理我的所有异常。
很明显,我的类实现了ExceptionMapper<
Throwable>
,我们知道,所有异常都以某种方式扩展了Throwable
。
现在我使用jax-rs @NotNull
检查我的资源输入值是否为null并且通过一些搜索,我意识到当注释字段为null时它会抛出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 errorselse 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 errorsreturn response;
}}
问题是这不起作用,但如果我要创建另一个实现
ExceptionMapper<
ConstraintViolationException>
并在那里处理它的异常映射器提供程序,它的工作没有任何问题。正如我之前所说(并且还检查过)所有异常都以某种方式从
Throwable
类扩展,所以我错过了什么以及为什么它不起作用?......
由于没有工作,我的意思是它忽略了我的mapper(从
ExceptionMapper<
Throwable>
实现的那个)并且具有正常行为,它返回状态代码400而没有响应有效负载,就像根本没有映射器一样答案
ExceptionMapper
的工作方式是,您可以创建一个通用的ExceptionMapper<
Throwable>
,它可以处理所有错误。然后你可以创建更具体的ExceptionMapper
s,以另一种方式处理更具体的错误。所有这些都在不同的课程中。事实上,在一个单独的类中为你工作,让我相信在某个地方有一个更具体的
ExceptionMapper
,它可以在你可以之前处理异常。【JAX-RS(泽西实现)ExceptionMapper 没有捕获ConstraintViolationException】ExceptionMappers的使用方式实际上非常干净,并且还可以保持代码清洁。想要将代码保存在一个中心位置,将导致巨大的
if
......推荐阅读
- 触摸无法在Android设备上的Unity上使用
- 如何找到互联网连接类型是否通过java代码Wifi或LAN连接不与android
- 在Android中使用UDP和MQTT协议编写聊天编程
- 从.Net到vb6的Web服务的DLL - 如何设置app.config
- Android模拟器错误(std :: bad_alloc)
- 无法在Android Studio AVD Manager中启用“快照”并保存
- 如何在WebSphere中监视和识别性能问题()
- 6个对WebSphere/中间件管理员有用的工具
- WebSphere Application Server 8.5.5有哪些新功能()