package com.java110.config.feign;
|
|
|
import com.netflix.hystrix.exception.HystrixBadRequestException;
|
import feign.Response;
|
import feign.Util;
|
import feign.codec.ErrorDecoder;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import java.io.IOException;
|
|
/**
|
* 自定义异常解析
|
*/
|
public class UserErrorDecoder implements ErrorDecoder {
|
|
private static final int HTTP_STATUS_400 = 400;
|
|
private Logger logger = LoggerFactory.getLogger(getClass());
|
|
/**
|
* 异常解析 在 SynchronousMethodHandler 类 134 号调用
|
*
|
* @param methodKey 方法key
|
* @param response 返回对象
|
* @return 返回异常
|
*/
|
public Exception decode(String methodKey, Response response) {
|
|
Exception exception = null;
|
try {
|
String json = Util.toString(response.body().asReader());
|
|
logger.error("调用方法出现异常了:" + json);
|
exception = new RuntimeException(json);
|
// 这里只封装4开头的请求异常ß && response.status() < 500
|
if (HTTP_STATUS_400 <= response.status()) {
|
exception = new HystrixBadRequestException("请求参数错误:"+Util.toString(response.body().asReader()), exception);
|
} else {
|
logger.error(exception.getMessage(), exception);
|
}
|
} catch (IOException ex) {
|
logger.error(ex.getMessage(), ex);
|
}
|
|
|
return exception;
|
}
|
}
|