如何让所有转换器和格式化程序在春季注册



我希望Spring ConverterSPI/Formatter和JsonHttpMessageConverter/XmlHttpMessageConverter中的序列化和反序列化行为保持一致。

因此,我尝试将Spring ConverterSPI中的所有转换器注册到JsonHttpMessageConverter/XmlHttpMessageConverter提供的全局配置中。

那么,如何让所有的转换器和格式化程序在春季注册呢?

我想按目标类型获取转换器和格式化程序的条件是String或Number类。

最严重的问题是一些基于字段注释的格式化程序,如@NumberFormat。例如,org.springframework.format.number.NumberFormatAnnotationFormatterFactory基于@NumberFormat创建格式化程序。

这也是spring的有用格式化程序。它不仅与类类型有关,还与字段注释有关。我需要获得这部分格式化程序的相关信息。

这可能吗?

您可以通过接口自动连接它们:

@Autowired
private List<HttpMessageConverter> converters;
@Autowired
private List<Formatter> formatters;

我想你想要https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/ListableBeanFactory.html#getBeansOfType-java.lang.Class-

所以有点像。

@SpringBootApplication
public class Application {
    private static ApplicationContext applicationContext;
 
    public static void main(String[] args) {
        applicationContext = SpringApplication.run(Application.class, args);
applicationContext.getBeansOfType(XmlHttpMessageConverter.class);
applicationContext.getBeansOfType(Formatter.class);
    }
}

显然,您需要对getBeansOfType的返回值执行一些操作。

我不知道你所说的"通过字段注释注册"是什么意思,当你查询spring的bean时,这并不重要。

最新更新