如何为FeignClient单独配置Jackson以解析响应中的蛇形命名字段?
解决方案
这里提供两种互不冲突的实现方案,都不会影响项目全局的Jackson驼峰输出配置:
方案1:为指定FeignClient单独配置蛇形解析的Jackson解码器(推荐,适配该Feign下所有接口统一返回蛇形的场景)
这种方案不需要修改DTO字段注解,仅对当前指定的FeignClient生效。
步骤1:编写Feign自定义配置类
注意这个配置类不要添加@Configuration注解,也不要被项目的@ComponentScan扫描到,否则会变成全局Feign配置影响其他接口:
import feign.codec.Decoder; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import org.springframework.cloud.openfeign.support.SpringDecoder; import org.springframework.http.converter.HttpMessageConverters; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; public class ExternalApiFeignConfig { public Decoder feignDecoder() { // 单独初始化专属ObjectMapper,使用蛇形命名策略 ObjectMapper snakeCaseMapper = new ObjectMapper(); // 低版本Spring Boot请替换为PropertyNamingStrategy.SNAKE_CASE snakeCaseMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); // 可按需补充其他配置,比如日期格式化规则 // snakeCaseMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(snakeCaseMapper); return new SpringDecoder(() -> new HttpMessageConverters(converter)); } }
步骤2:在FeignClient注解上绑定该配置
import org.springframework.cloud.openfeign.FeignClient; @FeignClient( name = "externalIssueApi", url = "${外部API的调用地址配置项}", configuration = ExternalApiFeignConfig.class // 绑定自定义配置 ) public interface IssueFeignClient { // 原有接口方法定义保持不变 }
方案2:直接在DTO字段上指定映射名(简单快捷,适合字段少的场景)
如果仅Issue类的少量字段需要匹配蛇形,不需要修改任何配置,直接在对应字段上加@JsonProperty注解指定蛇形字段名即可:
public class Issue { private Assignee assignee; @JsonProperty("created_at") private Date createdAt; @JsonProperty("updated_at") private Date updatedAt; @JsonProperty("closed_at") private Date closedAt; private String description; @JsonProperty("due_date") private Date dueDate; // 原有getter、setter、toString方法完全不变 }
这种方案的缺点是每个需要映射的多词字段都要单独加注解,字段量大时比较繁琐。
内容的提问来源于stack exchange,提问作者horatius
相关产品推荐
相关产品推荐

