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中获取。