package jnpf.config; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.ObjectFactory; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.cloud.openfeign.support.SpringDecoder; import org.springframework.cloud.openfeign.support.SpringEncoder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import feign.codec.Decoder; import feign.codec.Encoder; /** * Feign 客户端专用的 Jackson 配置:使用默认驼峰命名策略。 *
* jnpf-extend 全局 {@link JacksonConfig} 把 ObjectMapper 配成 SNAKE_CASE * (前端约定的蛇形契约),但其他 jnpf-* 微服务对外 REST 接口仍用驼峰。 * 全局蛇形 mapper 会被 Spring Cloud OpenFeign 默认 Decoder 复用, * 导致 Feign 调 jnpf-permission 等服务时 JSON 字段名映射不上 → entity 字段全 null。 *
* 这里给 Feign 单独装一个驼形 ObjectMapper 的 Decoder/Encoder,
* 不影响 MVC 自身对前端的蛇形响应。
*/
@Configuration
public class FeignClientJacksonConfig {
private ObjectMapper feignObjectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return mapper;
}
@Bean
public Decoder feignDecoder() {
MappingJackson2HttpMessageConverter converter =
new MappingJackson2HttpMessageConverter(feignObjectMapper());
ObjectFactory