为了账号安全,请及时绑定邮箱和手机立即绑定

JAX-RS(球衣实现)ExceptionMapper<Throwable>

JAX-RS(球衣实现)ExceptionMapper<Throwable>

鸿蒙传说 2021-12-18 09:50:24
我有一个ExceptionMapperas a@Provider来处理我的所有异常。所以很明显,我的类实现了ExceptionMapper<Throwable>,我们知道,所有异常都Throwable以某种方式扩展。现在我使用 jax-rs@NotNull检查我的资源输入值是否为空,并且通过一些搜索,我意识到ConstraintViolationException当注释字段为空时它会抛出。所以我尝试处理它并在我的 ExceptionMapper 中添加一些细节来响应(添加一些自定义 json 模型),如下所示:@Providerpublic 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以某种方式从类中扩展,所以我错过了什么以及为什么它不起作用?......没有工作,我的意思是它忽略了我的映射器(实现 from 的映射器ExceptionMapper<Throwable>)并具有正常行为,即返回状态代码 400 没有响应负载,就像根本没有映射器一样
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

ExceptionMapper应该工作的方式是您可以创建一个通用的ExceptionMapper<Throwable>,它可以处理所有错误。然后您可以创建更具体的ExceptionMappers,以另一种方式处理更具体的错误。所有这些都在单独的课程中。

在一个单独的类中执行它对你有用的事实让我相信有一个更具体的ExceptionMapper地方,它可以在你之前处理异常。

ExceptionMappers 的使用方式实际上非常干净,并且还可以保持您的代码干净。想要将代码保存在一个中心位置,将导致一个巨大的if......


查看完整回答
反对 回复 2021-12-18
  • 1 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号