在CXF中自定义JSR 311 (Restful)的ExceptionMapper

在CXF中默认的异常处理是无法满足我要的方式的,我需要把异常转换为JSON格式,返回给客户的。这样就只能自定义异常处理了。
JSR已经考虑到了这种情况,少量的编码就可以实现需求。
1.编写自己的ExceptionMapper
import java.util.Locale;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

/**
 *
 * @author Luo Wenqiang
 */
@Provider
public class InvokeFaultExceptionMapper implements ExceptionMapper<InvokeFault> {

    public Response toResponse(InvokeFault ex) {
        StackTraceElement[] trace = new StackTraceElement[1];
        trace[0] = ex.getStackTrace()[0];
        ex.setStackTrace(trace);
//        System.out.println("处理自定义的异常");
        ResponseBuilder rb = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
        rb.type("application/json;charset=UTF-8");
        rb.entity(ex);
        rb.language(Locale.SIMPLIFIED_CHINESE);
        Response r = rb.build();
        return r;
    }
}

2.加载ExceptionMapper
    <jaxrs:server id="services" address="/users">
        <jaxrs:serviceBeans>
            <ref bean="userService"/>
        </jaxrs:serviceBeans>
        <jaxrs:providers>
            <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
            <bean class="org.fenbaoya.open.platform.users.InvokeFaultExceptionMapper"/>
        </jaxrs:providers>
    </jaxrs:server>

转载自:http://blog.163.com/java_star/blog/static/117714805201201333531865/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值