有效Formatters
注册的所需步骤是:
formatters
。@Autowired
ConversionService
个实例时,位于mvcConversionService的方法WebMvcConfigurationSupport会获得ConversionService
个实例并注册所有在返回实例之前就已存在formatters
。但是,如果@Configuration
类扩展了WebSecurityConfigurerAdapter
抽象类,则某些组件在@Autowired
注册之前尝试ConversionService
formatters
个实例在Spring上下文中,addFormatters
方法不包含任何formatters
。
我刚刚创建了以下使用Spring Boot重现此问题的概念证明:
https://github.com/jcagarcia/proofs/tree/master/spring-security-and-formatters
如果使用mvn compile spring-boot:run
命令执行this proof of concept,则可以检查Create Pets
视图是否显示枚举值,而不将转换应用于String。
似乎需要ConversionService
实例的组件是ContentNegotiation
中的@Autowired
@Override
。
简单的解决方法是@Autowired
WebSecurityConfigurerAdapter类中的setContentNegotiationStrategy方法,而不包含mvn compile spring-boot:run
注释。 (概念验证包括此解决方案)
之后,使用Create Pets
命令再次执行此概念验证,您可以检查ContentNegotiationStrategy
视图是否显示应用了有效格式的枚举值。
我认为这不是最佳解决方案,因为@Autowired
不再是SELECT distinct 1 products.id FROM products WHERE products.id = ?;
了。
有关如何解决此问题的任何想法?
随意检查概念证明并执行它以重现问题。
最诚挚的问候,