如何获得春季注册的所有转换器和格式化器?

时间:2018-11-02 11:29:03

标签: java spring spring-boot spring-web

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

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

那么如何获取所有在Spring中注册的转换器和格式化器?

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

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

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

这可能吗?

2 个答案:

答案 0 :(得分:1)

您可以通过界面对其进行自动接线:

@Autowired
private List<HttpMessageConverter> converters;

@Autowired
private List<Formatter> formatters;

答案 1 :(得分:0)

我认为您想要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的返回值做些事情。

我不确定您所说的“由fieldannotation注册”是什么意思,当您在spring中查询它所拥有的bean时应该没关系。