in src/main/java/feign/error/AnnotationErrorDecoder.java [133:160]
static ErrorHandlingDefinition readAnnotation(ErrorHandling errorHandling,
Decoder responseBodyDecoder) {
ExceptionGenerator defaultException = new ExceptionGenerator.Builder()
.withResponseBodyDecoder(responseBodyDecoder)
.withExceptionType(errorHandling.defaultException())
.build();
Map<Integer, ExceptionGenerator> statusCodesDefinition =
new HashMap<Integer, ExceptionGenerator>();
for (ErrorCodes statusCodeDefinition : errorHandling.codeSpecific()) {
for (int statusCode : statusCodeDefinition.codes()) {
if (statusCodesDefinition.containsKey(statusCode)) {
throw new IllegalStateException(
"Status Code [" + statusCode + "] " +
"has already been declared to throw ["
+ statusCodesDefinition.get(statusCode).getExceptionType().getName() + "] " +
"and [" + statusCodeDefinition.generate() + "] - dupe definition");
}
statusCodesDefinition.put(statusCode,
new ExceptionGenerator.Builder()
.withResponseBodyDecoder(responseBodyDecoder)
.withExceptionType(statusCodeDefinition.generate())
.build());
}
}
return new ErrorHandlingDefinition(defaultException, statusCodesDefinition);
}