cxf自定义返回错误信息

本文介绍了如何在CXF中实现自定义的错误信息返回。通过创建一个实现了`ExceptionMapper`接口的`InvokeFaultExceptionMapper`类,捕获并处理异常,组装成指定格式的响应。然后在CXF的配置文件中进行配置,将这个自定义的异常处理器添加到提供者列表中。这样,当发生错误时,前端通过AJAX调用可以在`error`回调中接收到详细的错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先实现cxf自带的拦截器,实现内容如下

package com.dc.city.common.exception;


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;


import com.dc.city.common.vo.InvokeExceptionVo;



@Provider
public class InvokeFaultExceptionMapper implements ExceptionMapper<Throwable> {


    /**
     * 组装反射信息
     */
    public Response toResponse(Throwable ex) {
        ex.printStackTrace();// 打印出错误日志
        StackTraceElement[] trace = new StackTraceElement[1];
        trace[0] = ex.getStackTrace()[0];// 获取出错的类,方法名称等信息
        // 开始组织错误信息
        InvokeExceptionVo vo = new InvokeExceptionVo();
        vo.setClassName(trace[0].getClassName());
        vo.setLineNumber(String.valueOf(trace[0].getLineNumber()));
        vo.setMethodName(trace[0].getMethodName());
        vo.setResultInfo(ex.getMessage());
        // 调用返回创建类 固定的值
        ResponseBuilder rb = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
        rb.type("application/json;charset=UTF-8");
        rb.entity(vo);
        rb.language(Locale.SIMPLIFIED_CHINESE);
        Response r = rb.build();
        return r;
    }
}

2.在cxf的配置文件中配置

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd ">


    <!-- 引入CXF Bean定义如下,早期的版本中使用 -->
    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

    <jaxrs:server>


        <jaxrs:serviceBeans>
 
        </jaxrs:serviceBeans>
        <jaxrs:providers>
            <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
            <bean class="com.dc.city.common.exception.InvokeFaultExceptionMapper" />
        </jaxrs:providers>
        <jaxrs:extensionMappings>
            <entry key="xml" value="application/xml" />
            <entry key="json" value="application/json" />
            <entry key="jsonp" value="application/javascript" />
        </jaxrs:extensionMappings>


    </jaxrs:server>

</beans>

备注:在ajax前台调用的时候错误信息要在error中获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值