jersey框架统一处理异常机制
来源:互联网 发布:开淘宝上卖花卉好赚吗 编辑:程序博客网 时间:2024/04/29 23:07
最近在整理jersey异常的统一处理,结合官网的解释,jersey一般支持两种异常的处理:
1、WebApplicationException异常的子类
@Override
public Response getResponse() {
return Response.status(httpStatus).type(MediaType.APPLICATION_JSON).entity(getResultInfo()).build();
}
重写此方法后,框架直接返回结果
2、实现ExceptionMapper接口
@Override
public Response toResponse(Exception exception) {
String result = "";
ResultInfo resultInfo = new ResultInfo();
resultInfo.setCode(RestfulConstant.RESULT_STATUS_NOT_FOUND);
resultInfo.setMessage(RestfulConstant.RESULT_MESSAGE_ERROR_NOT_FOUND);
result = JSONObject.fromObject(resultInfo).toString();
// return Response.status(Response.Status.NOT_FOUND).entity(new
// ErrorResponse(exception.getClass().toString(),
// exception.getMessage())).build();
System.err.println("我调用过SystemExceptionMapper");
return Response.status(Response.Status.NOT_FOUND).entity(result).build();
}
现在就是要分析一下,这两个情况的组合:
一、如果只使用第一种来处理异常,比较简单,但是不是很灵活,因为你如果想要根据自己的业务去自定义异常,同时为了避免过多的try catch语句块,这种方式有点不是很好
二、如果使用第二种来处理异常,此时可以实现多个ExceptionMapper的类统一处理异常,如
1、
@Provider
public class BadMethodExceptionMapper implements ExceptionMapper<NotAllowedException> {}
2、
@Provider
public class SystemExceptionMapper implements ExceptionMapper<Exception>{}
但是,这样会碰到多种情况,咱们一一来分析
(1)、如果是我们自定义并且是手动抛出的异常,如 throw new NotAllowedException(Response.status(200).entity("xixixi").build());此时被捕捉处理的Mapper是上面的2
(2)、如果是系统的抛出的异常,如我们使用postman来人为的改动请求方法,将get改成put,此时捕捉异常处理的是1
(3)、如果将上面的1 Mapper实现给删除掉,也就是只有2的Mapper实现,则(1)(2)中的捕捉异常处理的是2
三、如果第一种和第二种异常处理同时存在,如果我们显示的抛出WebApplicationException异常的子类,第二种Mapper不能够捕捉这个异常,它将会直接返回,特别注意的就是此时发生这种情况是因为WebApplicationException异常的子类构建过Reponse实体,所以不会被Mapper来捕捉
所以,如果想要用统一异常处理最好只需要调用一个public class SystemExceptionMapper implements ExceptionMapper<Exception>{}来处理,免得出现不同的结果。
- Jersey框架的统一异常处理机制
- jersey框架统一处理异常机制
- Jersey Rest 异常统一处理机制
- Jersey框架的统一异常处理
- Jersey 统一异常处理
- 统一处理jersey的异常
- REST(Jersey实现)统一异常机制
- springmvc 统一处理异常机制
- springboot统一异常处理机制
- SpringMVC统一异常处理机制
- golang web框架 utron 的异常统一处理
- 统一的处理异常
- 统一异常处理
- strut2 统一异常处理
- Spring统一异常处理
- 异常的统一处理
- sprimgmvc统一处理异常
- springmvc统一异常处理
- 简单了解Mybatis
- Xcode打包ipa的步骤(简述)
- php合成图片
- C++中的继承
- JSTL标签库
- jersey框架统一处理异常机制
- C# sort 方法详解及示例
- 剑指offer之O(1)删除单链表节点
- maven 仓库源
- shiro字符串权限解析器内部分析
- 要学习的东西
- 2016/11/5
- 百度贴吧月入上万!年收入十几万自动来粉丝的核心玩法
- iOS Mansonry简介和使用