Skip to content

Feign decoder

package com.configuration

import feign.Response
import feign.codec.ErrorDecoder
import org.slf4j.LoggerFactory
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class FeignConfig {
  @Bean
  fun feignErrorDecoder(): FeignErrorDecoder = FeignErrorDecoder()
}

class FeignErrorDecoder : ErrorDecoder {
  private val logger = LoggerFactory.getLogger(FeignErrorDecoder::class.java)

  override fun decode(methodKey: String, response: Response): Exception {
    val body = response.body()?.asInputStream()?.bufferedReader()?.use { it.readText() }
    logger.error("Error en Feign Client: método=$methodKey, status=${response.status()}, body=$body")
    return when (response.status()) {
      422 -> UnprocessableStatementException("Error 422: $body")
      else -> Exception("Error desconocido: $body")
    }
  }
}

compare JSON

JSONAssert.assertEquals("{json}", objectMapper.writeValueAsString(object), JSONCompareMode.LENIENT);