在使用基于dubbox的微服务中,使用resteas实现rest接口时,常用的spring中统一异常处理已不适用。通过查资料发现使用这种方式可以实现。
1、定义一个统一异常处理类
package com.sf.xxx.user.exception;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import com.xxx.framework.domain.Result;
/**
* @author 833902
* 2018年2月9日 下午4:25:23
*/
@Provider
public class CustomException implements ExceptionMapper<WebApplicationException>{
@Override
public Response toResponse(WebApplicationException exception) {
Result<Object> result = new Result<>();
result.setSuccess(false);
result.setErrorMessage(exception.getMessage());
return Response.ok().entity(result).build();
}
}
2、在定义访问的xml中,添加extension
<dubbo:protocol name="rest"
port="8888"
threads="500"
contextpath="services"
server="tomcat"
accepts="500"
extension="com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter,com.xxx.xxxx.user.exception.CustomException"/>
3、在业务代码需要进行统一处理的地方进行throw
throw new WebApplicationException("运行时异常");
参考资料: