OpenFeign 默认序列化器 Jackson 替换为 FastJson2 序列化器
·
项目版本与运行环境
- JDK 版本:17
- 操作系统:Windows 11
- SpringBoot 版本:3.5.14
- SpringCloud 版本:2025.0.2
- OpenFeign 版本:4.3.2
引入依赖
<dependencyManagement>
<dependencies>
<!-- Spring Boot 相关依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.5.14</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud 相关依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2025.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- FastJson2 核心 -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.61</version>
</dependency>
<!-- FastJson2 - Spring 集成 -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.61</version>
</dependency>
</dependencies>
编写配置类
/**
* OpenFeign 配置类
*
* @author WuJiaJun
*/
@Configuration
public class FeignFastJsonConfig {
/**
* 注册自定义 Decoder(反序列化器)
*/
@Bean
public Decoder feignDecoder(FastJsonHttpMessageConverter fastJsonConverter,
ObjectProvider<HttpMessageConverters> defaultConverters) {
// 将 Fastjson 放在最前面,同时保留其他默认序列化器
List<HttpMessageConverter<?>> all = new ArrayList<>();
all.add(fastJsonConverter);
/*
安全合并默认消息转换器:
1. 使用 ObjectProvider 防止 Bean 不存在时启动报错
2. 保留 StringHttpMessageConverter、ByteArrayHttpMessageConverter 等基础序列化器
避免仅配置 Fastjson 导致非 JSON 响应解码失败
*/
defaultConverters.ifAvailable(c -> all.addAll(c.getConverters()));
return new SpringDecoder(() -> new HttpMessageConverters(all));
}
/**
* 自定义 OpenFeign 发送消息体时的序列化器
*
* @param fastJsonConverter FastJson2 序列化器
*/
@Bean
public Encoder feignEncoder(FastJsonHttpMessageConverter fastJsonConverter) {
return new SpringEncoder(() -> new HttpMessageConverters(fastJsonConverter));
}
}
FastJson2 配置类
@Bean
public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
return createFastJsonConverter();
}
public FastJsonHttpMessageConverter createFastJsonConverter() {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setCharset(StandardCharsets.UTF_8);
// 序列化配置
config.setWriterFeatures(
JSONWriter.Feature.WriteLongAsString, // Long → String 防精度丢失
JSONWriter.Feature.WriteMapNullValue // 输出 null 字段(按需)
);
// 反序列化配置
config.setReaderFeatures(
// 反序列化时忽略未知字段,避免报错
);
converter.setFastJsonConfig(config);
// 设置默认字符集为 UTF-8,避免中文乱码
converter.setDefaultCharset(StandardCharsets.UTF_8);
// 限定转换器仅处理 application/json 媒体类型
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
return converter;
}
编写 FeignClient
/**
* 用户服务 FeignClient
*/
@FeignClient(name = "user-service",configuration = FeignFastJsonConfig.class)
public interface UserFeignClient {
@PostMapping("/test/users/json")
void sendMessage(@RequestBody Map<String, Object> result);
}
user-service:用户服务
PS:使用了 Nacos
验证效果
业务服务接口:
@Resource
private UserFeignClient userFeignClient;
@PostMapping("/test/business/json")
public void testJsonOfBusiness() {
Map<String, Object> result = new HashMap<>();
result.put("id", 9007199254740993L); // 超出 JS 安全整数范围
result.put("name", null); // null 字段
result.put("time",LocalDateTime.now());
userFeignClient.sendMessage(result);
}
用户服务接口
@PostMapping("/test/users/json")
public void sendMessage(@RequestBody Map<String, Object> result) {
log.info("result:{}",result)
}
接收数据为以下内容:
{
"id":"9007199254740993",
"name":null,
"time":"2026-06-25 20:15:33"
}
成功使用 FastJson2 序列化器
更多推荐



所有评论(0)