Java 如何获得在spring中注册的所有转换器和格式化程序?
我希望在Spring ConverterSPI/Formatter和JsonHttpMessageConverter/XmlHttpMessageConverter中序列化和反序列化的行为保持一致 因此,我尝试将SpringConverterSPI中的所有转换器注册到JsonHttpMessageConverter/XmlHttpMessageConverter提供的全局配置 那么,如何获得在spring中注册的所有转换器和格式化程序呢 我想得到转换器和格式化程序的条件,目标类型是字符串或数字类 最严重的问题是一些基于字段注释的格式化程序,如@NumberFormat。Java 如何获得在spring中注册的所有转换器和格式化程序?,java,spring,spring-boot,spring-web,Java,Spring,Spring Boot,Spring Web,我希望在Spring ConverterSPI/Formatter和JsonHttpMessageConverter/XmlHttpMessageConverter中序列化和反序列化的行为保持一致 因此,我尝试将SpringConverterSPI中的所有转换器注册到JsonHttpMessageConverter/XmlHttpMessageConverter提供的全局配置 那么,如何获得在spring中注册的所有转换器和格式化程序呢 我想得到转换器和格式化程序的条件,目标类型是字符串或数字类
例如,org.springframework.format.number.numberformatNotationFormatterFactory基于@NumberFormat创建格式化程序 这也是spring有用的格式化程序,它不仅与类类型有关,还与字段注释有关。 我需要获取这部分格式化程序的相关信息
这可能吗?您可以通过以下接口自动连接:
@Autowired
private List<HttpMessageConverter> converters;
@Autowired
private List<Formatter> formatters;
@Autowired
私有列表转换器;
@自动连线
私有列表格式化程序;
我想你想要
差不多吧
@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的返回值进行处理
我不确定你所说的“通过fieldannotations注册”是什么意思,当你查询spring的bean时,这应该无关紧要。这是我的选择。因为有些转换器可能注册到FormatterRegistry,但没有注册到container。最严重的问题是一些基于FieldAnnotation的格式化程序。我需要获取这部分格式化程序的相关信息。一些基于字段注释的格式化程序,如@NumberFormat。因此仅获取格式化程序的目标类型和源类型是不够的。@caotc我很困惑。无论您如何注册一个bean,它仍然会在spring上下文中结束。例如,org.springframework.format.number.numberformatNotationFormatterFactory基于@NumberFormat创建格式化程序。这也是spring的有用格式化程序。它不仅与类类型有关,还与字段注释有关。