java – Spring Data JPA方法REST:Enum to Integer转换
我有一个端点:
其中X应该是一个Integer值(我的OfferType实例的序数值),而Spring认为X是一个String,并将StringToEnumConverterFactory应用于StringToEnum转换器.
所以我写了一个自定义转换器< Integer,OfferType>它只是通过给定的序数得到一个实例:
然后我使用配置正确注册:
而且我被期望findByType?type = X的所有请求都将通过我的转换器,但它们没有. 有没有办法说定义为请求参数的所有枚举必须作为整数提供?此外,有什么方法可以在全球范围内说出来,而不仅仅是针对特定的枚举? 编辑:我在我的类路径中找到了IntegerToEnumConverterFactory,它可以满足我的所有需要??.它在DefaultConversionService中注册,这是一个默认的转换服务.怎么能应用? 编辑2:这是一件非常简单的事情,我想知道是否有一个属性可以转换枚举转换. EDIT3:我试着写一个转换器< String,OfferType>在我从TypeDescriptor.forObject(value)获得String后,它没有帮助. EDIT4:我的问题是我已经将自定义转换器注册放入MVC配置(带有addFormatters的WebMvcConfigurerAdapter)而不是REST存储库(RepositoryRestConfigurerAdapter with configureConversionService). 最佳答案
Spring将查询参数解析为字符串.我相信它总是使用Converter< String,?>转换器从查询参数转换为存储库方法参数.它使用增强型转换器服务,因为它注册了its own converters,例如Converter< Entity,Resource>.
因此,您必须创建一个转换器< String,OfferType>,例如:
然后在扩展RepositoryRestConfigurerAdapter的类中配置此转换器以供Spring Data REST使用:
我试着将它添加到the basic tutorial,在Person类中添加了一个简单的枚举:
当我打电话给:
我得到的结果没有错误:
要实现全局枚举转换器,您必须使用以下方法创建工厂并在配置中注册它:conversionService.addConverterFactory().以下代码是修改后的example from the documentation:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |