Java Web 学习笔记之十一:RestEasy统一处理异常

14 篇文章 0 订阅
10 篇文章 0 订阅

JBoss RestEasy框架配置异常统一处理

前提

  • 利用JBoss restEasy框架搭建的restful java web后台应用
  • 希望通过统一的方式对restful接口抛出的异常进行处理封装

步骤

1.定义异常处理类

  • 异常处理类需要实现javax.ws.rs.ext.ExceptionMapper接口,代码如下:
package xxx.xxx.xxx.common.ext;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.ext.ExceptionMapper;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * 统一处理接口抛出的异常
 * 
 * Created by xuyh at 2017年7月12日 下午3:05:38.
 */
public class RestExceptionHandler implements ExceptionMapper<Exception> {
    private static Logger logger = LoggerFactory.getLogger(RestExceptionHandler.class);

    public Response toResponse(Exception exception) {
        logger.warn(exception.getMessage());

        //http返回码
        ResponseBuilder responseBuilder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
        //返回的数据
        responseBuilder.entity(new Error(String.valueOf(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()), exception.getMessage()));
        //返回的数据类型
        responseBuilder.type(MediaType.APPLICATION_JSON);
        return responseBuilder.build();
    }


    private class Error {
        private String errorCode;//错误码
        private String errorMessage;//错误消息

        public Error(String errorCode, String errorMessage) {
            super();
            this.errorCode = errorCode;
            this.errorMessage = errorMessage;
        }

        public String getErrorCode() {
            return errorCode;
        }

        public void setErrorCode(String errorCode) {
            this.errorCode = errorCode;
        }

        public String getErrorMessage() {
            return errorMessage;
        }

        public void setErrorMessage(String errorMessage) {
            this.errorMessage = errorMessage;
        }
    }
}

2.将定义好的异常处理类配置到restEasy

  • 作者使用的servlet容器是Jetty并通过web.xml文件进行描述,因此在web.xml中定义异常处理信息,如下图
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!--其他配置省略-->

    <!-- 配置统一异常处理handler -->
    <context-param>
        <param-name>resteasy.providers</param-name>
        <param-value>xxx.xxx.xxx.common.ext.RestExceptionHandler</param-value>
    </context-param>

    <!--其他配置省略-->

</web-app>

3.rest接口中抛出异常,即可被统一异常处理器处理

    @GET
    @Path("/{test}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public String test(@PathParam("test") String test) throws Exception {

        throw new Exception(test);

    }

4.测试接口

测试定义的接口,路径为 /mklo , 可以看到如下结果,说明配置成功

{
    "errorCode": "500",
    "errorMessage": "mklo"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值