ApplicationConversionService共享实例不可修改时如何添加自定义转换器
Spring Boot 2.5+ 自定义转换器添加方案
Spring Boot 2.5.0-RC1 开始ApplicationConversionService.getSharedInstance()返回的是不可修改的共享实例,禁止直接调用addConverter()等修改方法,可通过以下三种合规方式实现自定义转换器的注册:
- 方式一:注册转换器Bean到Spring容器
Spring Boot 会自动扫描所有Converter、GenericConverter、Formatter类型的Bean,自动注入到全局转换服务中,无需手动调用添加逻辑,是官方推荐的通用实现方式。
示例代码:
import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; import java.util.Date; // 注册为Spring Bean即可自动生效 @Component public class CustomStringToDateConverter implements Converter<String, Date> { @Override public Date convert(String source) { // 实现自定义转换逻辑 return new Date(Long.parseLong(source)); } }
- 方式二:Web场景下通过MVC配置扩展
如果是Web请求处理相关的转换器,可实现WebMvcConfigurer接口重写addFormatters方法注册:
示例代码:
import org.springframework.context.annotation.Configuration; import org.springframework.format.FormatterRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addFormatters(FormatterRegistry registry) { // 手动注册自定义转换器 registry.addConverter(new CustomStringToDateConverter()); } }
- 方式三:自定义局部转换服务实例
如果仅需要在局部业务场景使用自定义转换服务,可自行创建可修改的ApplicationConversionService实例:
// 创建独立的可修改转换服务实例 ApplicationConversionService customConversionService = new ApplicationConversionService(); // 直接添加自定义转换器 customConversionService.addConverter(new CustomStringToDateConverter());
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

