Jersey全局异常处理器
来源:互联网 发布:伊美服饰淘宝网 编辑:程序博客网 时间:2024/05/29 08:21
全局异常处理器
webservice定义全局返回错误码,是很重要的一个功能,jersey正好就能实现这一功能.
整个流程就是当jersey托管的类发现了异常,
抛出给jersey的异常处理器,
该异常处理器直接返回自定义的错误代码.
1.定义异常代码
2.定义出现异常将返回的实体代理
也就是封装异常信息到这个类中,再转换为json串返回,如果自己直接构造字串也是可以代替的
3.自定义异常
自定义异常,处理时拦截该指定异常
异常处理器要实现ExceptionMapper<Exception>接口,并复写返回方法,另外一定要使用@Provider标识该类为一个jersey的’处理器’,如下:
5.注册该异常
在RESTApplication中要加载该异常,可以使用package扫包,或者直接注册异常都是可以的.
6.测试
7.返回结果
转自:http://blog.csdn.net/u012706811/article/details/52054157
webservice定义全局返回错误码,是很重要的一个功能,jersey正好就能实现这一功能.
整个流程就是当jersey托管的类发现了异常,
抛出给jersey的异常处理器,
该异常处理器直接返回自定义的错误代码.
1.定义异常代码
可以使用枚举类,也可以写到配置文件中,再写个工具类获取.看项目需求了.
public enum ErrorCode { OK(0,"OK"),ID_INVALID(1,"ID is invalid"),OTHER_ERR(2,"未知错误"); private int code; private String message; ErrorCode(int code, String message) { this.code = code; this.message = message; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }}
2.定义出现异常将返回的实体代理
也就是封装异常信息到这个类中,再转换为json串返回,如果自己直接构造字串也是可以代替的
@XmlRootElement//标识该资源可以被jersey转为json或者xmlpublic class ErrorEntity { private int resp_code; private String resp_msg; public ErrorEntity(int resp_code, String resp_msg) { this.resp_code = resp_code; this.resp_msg = resp_msg; } public ErrorEntity() { } public int getResp_code() { return resp_code; } public void setResp_code(int resp_code) { this.resp_code = resp_code; } public String getResp_msg() { return resp_msg; } public void setResp_msg(String resp_msg) { this.resp_msg = resp_msg; }}
3.自定义异常
自定义异常,处理时拦截该指定异常
public class DeviceException extends Exception { private int code; private String message; /** * 构造异常类 * @param code * @param message */ public DeviceException( int code,String message) { this.code = code; this.message = message; } /** * 根据枚举类构造异常结果 * @param errorCode */ public DeviceException(ErrorCode errorCode) { this.code = errorCode.getCode(); this.message = errorCode.getMessage(); } public int getCode() { return code; } public void setCode(int code) { this.code = code; } @Override public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }}4.定义jersey异常处理器
异常处理器要实现ExceptionMapper<Exception>接口,并复写返回方法,另外一定要使用@Provider标识该类为一个jersey的’处理器’,如下:
@Providerpublic class DeviceExceptionMapper implements ExceptionMapper<Exception> { @Override public Response toResponse(Exception e) { Response.ResponseBuilder ResponseBuilder = null; if (e instanceof DeviceException){ //截取自定义类型 DeviceException exp = (DeviceException) e; ErrorEntity entity = new ErrorEntity(exp.getCode(),exp.getMessage()); ResponseBuilder = Response.ok(entity, MediaType.APPLICATION_JSON); }else { ErrorEntity entity = new ErrorEntity(ErrorCode.OTHER_ERR.getCode(),e.getMessage()); ResponseBuilder = Response.ok(entity, MediaType.APPLICATION_JSON); } System.out.println("执行自定义异常"); return ResponseBuilder.build(); }}
5.注册该异常
在RESTApplication中要加载该异常,可以使用package扫包,或者直接注册异常都是可以的.
public class RESTApplication extends ResourceConfig { public RESTApplication() { //想让jersey托管的部分需要加入扫描,或者使用register指定托管类也可以 packages("com.haikong.resources","com.haikong.exception"); //加载日志包 register(LoggingFilter.class); //加载json转换器 register(JacksonJsonProvider.class); System.out.println("加载RESTApplication"); }}
6.测试
/** * 测试全局异常托管 * @throws DeviceException */ @GET @Path("/testexception") public void testException() throws DeviceException {if (true){ throw new DeviceException(ErrorCode.OTHER_ERR);} }
7.返回结果
{"resp_code": 2,"resp_msg": "未知错误"}
转自:http://blog.csdn.net/u012706811/article/details/52054157
资源实例下载:http://download.csdn.net/detail/sotong006/9913077
阅读全文
0 0
- Jersey全局异常处理器
- 全局的异常处理器
- SpringMVC全局异常处理器
- ssm:全局异常处理器
- SpringMVC全局异常处理器
- 全局异常处理器
- 全局异常捕获处理器
- 全局异常捕获处理器
- Springmvc全局异常处理器
- 全局异常处理器
- 有关SpringMVC全局异常处理器
- Spring自定义全局异常处理器
- SpringMvc全局异常处理器配置
- springmvc异常处理-全局异常处理器开发
- spring mvc配置全局异常处理器
- springmvc(五)---全局异常处理器
- springmvc的全局异常处理器开发
- springmvc全局异常处理器的配置
- opencv输出中文字符,并控制字符大小
- request请求https时禁用安全请求警告
- java运算符
- Springboot 事务管理控制
- 文章标题
- Jersey全局异常处理器
- JQuery语法练习
- 总结下安装vs2015+opencv中常见的一些问题
- 微信小程序开发-页面数据传递(getStorage,setStorage)
- java(4)包装类型
- Js中window属性和方法
- CentOS 7 最小化安装后的注意事项及一些必备组件的安装
- 浅谈数论
- Java Cryptography Architecture(JCA)——加密的那点儿事儿(加密服务提供者、算法名称、转换名称)