feign nan转换报错
时间: 2023-07-21 22:59:18 浏览: 89
在Java中,当使用Feign进行HTTP请求时,如果接收到的响应中包含NaN(Not a Number)类型的数据,Feign会尝试将其转换为对应的Java类型。但是,由于NaN不是一个有效的Java数值类型,转换过程可能会报错。
要解决这个问题,可以通过自定义Feign的Decoder来处理NaN类型的数据。首先,创建一个实现了`Decoder`接口的自定义Decoder类,例如`CustomDecoder`。然后,重写其`decode`方法,在方法中对NaN类型进行特殊处理,如将NaN转换为null或其他可接受的数值类型。
下面是一个简单的示例代码:
```java
import feign.Response;
import feign.codec.Decoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
public class CustomDecoder implements Decoder {
private final Decoder delegate;
public CustomDecoder(ObjectFactory<HttpMessageConverters> messageConverters) {
this.delegate = new ResponseEntityDecoder(new SpringDecoder(messageConverters));
}
@Override
public Object decode(Response response, Type type) throws IOException, FeignException {
if (response.status() == HttpStatus.OK.value()) {
if (type == Double.class || type == double.class) {
// 处理NaN转换
double value = Double.parseDouble(response.body().toString());
return Double.isNaN(value) ? null : value;
}
// 其他类型转换使用默认的Decoder
return delegate.decode(response, type);
}
throw new FeignException(response.status(), response.reason(), response.request().httpMethod(), null, null);
}
}
```
然后,在使用Feign的地方,将默认的Decoder替换为自定义的Decoder,如下所示:
```java
Feign.builder()
.decoder(new CustomDecoder(new ObjectFactory<HttpMessageConverters>() {
@Override
public HttpMessageConverters getObject() {
return new HttpMessageConverters();
}
}))
.target(MyApi.class, "http://api.example.com");
```
通过使用自定义的Decoder,你可以对NaN类型的数据进行特殊处理,避免转换报错。
阅读全文