Skip to content

Commit ba31c59

Browse files
committed
Added Rate limit custom exception
1 parent 03118c1 commit ba31c59

2 files changed

Lines changed: 20 additions & 3 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.ipdata.client.error;
2+
3+
public class RateLimitException extends RemoteIpdataException {
4+
public RateLimitException(String message, Throwable cause, int status) {
5+
super(message, cause, status);
6+
}
7+
8+
public RateLimitException(String message, int status) {
9+
super(message, status);
10+
}
11+
}

src/main/java/io/ipdata/client/service/ApiErrorDecoder.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.google.common.io.CharStreams;
55
import feign.Response;
66
import feign.codec.ErrorDecoder;
7+
import io.ipdata.client.error.RateLimitException;
78
import io.ipdata.client.error.RemoteIpdataException;
89
import io.ipdata.client.model.Error;
910
import java.io.IOException;
@@ -13,7 +14,7 @@
1314

1415
@RequiredArgsConstructor
1516
public class ApiErrorDecoder implements ErrorDecoder {
16-
17+
private static final int RATE_LIMIT_STATUS = 403;
1718
private final ObjectMapper mapper;
1819
private final Logger logger;
1920

@@ -22,12 +23,17 @@ public Exception decode(String methodKey, Response response) {
2223
String message = null;
2324
try {
2425
//parse the url, but would strip the query parameters containing sensitive information (api-key)
26+
int responseCode = response.status();
2527
URL url = new URL(response.request().url());
2628
logger.error("An error occurred during an Ipdata API call: got status '{}' for path '{}'",
27-
response.status(), url.getPath());
29+
responseCode, url.getPath());
2830
message = CharStreams.toString(response.body().asReader());
2931
Error error = mapper.readValue(message, Error.class);
30-
return new RemoteIpdataException(error.getMessage(), response.status());
32+
if (responseCode == RATE_LIMIT_STATUS) {
33+
return new RateLimitException(error.getMessage(), responseCode);
34+
} else {
35+
return new RemoteIpdataException(error.getMessage(), response.status());
36+
}
3137
} catch (IOException ioException) {
3238
ioException.printStackTrace();
3339
return new RemoteIpdataException(message, response.status());

0 commit comments

Comments
 (0)