@Override
 public Object decode(Response response, Type type) throws IOException {
   Response.Body body = response.body();
   if (body == null) {
     return null;
   }
   if (String.class.equals(type)) {
     return Util.toString(body.asReader());
   }
   throw new DecodeException(format("%s is not a type supported by this decoder.", type));
 }
 @Override
 protected Response logAndRebufferResponse(
     String configKey, feign.Logger.Level logLevel, Response response, long elapsedTime)
     throws IOException {
   String requestId = requestIdProvider.getRequestId();
   HttpData reqData = requestDataProvider.retrieve(requestId);
   if (requestTraceable(reqData) && isNotSkipped(reqData)) {
     byte[] bodyData = Util.toByteArray(response.body().asInputStream());
     String content = new String(bodyData, StandardCharsets.UTF_8.name());
     HttpData resData = new HttpData(extractHeaders(response), extractStatus(response), content);
     Response rebufferedResponse =
         Response.create(response.status(), response.reason(), response.headers(), bodyData);
     requestResponseLogger.logObfuscatedResponse(reqData, resData, TAG);
     requestDataProvider.remove(requestId);
     return super.logAndRebufferResponse(configKey, logLevel, rebufferedResponse, elapsedTime);
   } else {
     log.debug("Cannot obfuscate response, matching request data lost");
     return super.logAndRebufferResponse(configKey, logLevel, response, elapsedTime);
   }
 }