static ErrorHandlingDefinition readAnnotation()

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);
    }