众所周知,java服务提供者提供给服务请求者应该是特定格式的数据,而不能出现异常栈类似信息,那么jersey中,如何添加统一的异常处理呢?

  针对jersey启动如果是实现了ResourceConfig接口的实现类,可以注册自定义的异常处理类。

/**
* 功能说明:统一异常处理过滤器
* @return <br/>
* 修改历史:<br/>
* 1.[2016年09月09日上午11:11] 创建方法 by hw
*/
@Provider
public class ExceptionHandler implements ExceptionMapper<Exception> { @Override
public Response toResponse(Exception e) { BaseResponse response = new BaseResponse();
if (e instanceof SuperException) { SuperException exp = (SuperException) e;
response.setErrCode(exp.getCode());
response.setMsg(exp.getMessage());
} else {
response.setErrCode(ErrorsDiscriptor.InvalidAuthCode.code());
response.setMsg(ErrorsDiscriptor.InternalService.message());
}
return Response.ok().entity(response).build();
} }

  在启动类中,需要将该类注册进rest中,jersey启动过程中会自动加载ExceptionHandler类,在调用者请求rest接口时,如果抛出异常,则由ExceptionHandler进行异常捕获并统一处理约定格式错误信息给调用者

@ApplicationPath("/rest")
public class MyApplication extends ResourceConfig {
/**
* MyApplication 构造方法
*/
public MyApplication() {
// 初始化Resource,以指定包的形式初始化,多个包之间以分号隔开
packages("com.timevale.esign.openapi.tech.resource"); // packages("com.timevale.esign.openapi.tech.opensvc.resource"); register(ExceptionHandler.class); // 注册spring filter
register(RequestContextFilter.class); // 注册数据转换器,支持传参和返回信息json格式与bean之间的自动转换
register(JacksonJsonProvider.class); // 注册支持multipart-formdata格式的请求
register(org.glassfish.jersey.media.multipart.MultiPartFeature.class); // 初始化数据库
EnvironmentInitializer.instance().initOnce();
}
}

  第二种方式,如果是以web.xml中配置jersey-spring的servlet实现的这种方式,指定jersey扫描自定义的ExceptionHandler所在的包即可,ExceptionHandler的实现同上。

<servlet>
<servlet-name>jersey-spring</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>cn.tsign.www.openapi.rest.resource;cn.tsign.www.openapi.rest.filter</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

最新文章

  1. ABP源码分析三十五:ABP中动态WebAPI原理解析
  2. git workflow
  3. js-读取上传文件后缀
  4. Qt工程转化为Vs工程
  5. [leetcode] Count Primes
  6. MINA快速传输文件
  7. 插入排序InsertionSort
  8. VMware下打开Chrome OS遇到没有网络连接可用
  9. 关于asp.net简单的下载问题
  10. Git 详细命令集
  11. 升级Xcode6.3插件失效解决办法
  12. C语言之switch
  13. 19. leetcode 100. Same Tree
  14. TFboy养成记 tensor shape到底怎么说
  15. 关于Allele(等位基因)的理解
  16. linux 下 命令行中运行 selenium chrome 问题
  17. windows service 2008 R2 安装net4.6环境失败,windows service 2008 R2 升级sp1问题
  18. POJ 1177 Picture(线段树周长并)
  19. SpringMVC Spring MyBatis 框架整合 Annotation MavenProject
  20. First Day!

热门文章

  1. WPF 控件库——带有惯性的ScrollViewer
  2. Javascript中对数组处理的函数汇总
  3. apache2.4配置
  4. Tensorflow的认识
  5. postgreSQL PL/SQL编程学习笔记(二)
  6. Linux常用的命令(3)
  7. C++_函数3-引用变量与函数的默认参数
  8. POJ 2182 Lost Cows (求序列第k大)
  9. 洛谷 P2680 运输计划(NOIP2015提高组)(BZOJ4326)
  10. HDU - 5686-Problem B (递推+高精)