我正在尝试使用Spring 3.2.4定义一个带有Enum作为键类型的map bean,这样:
<util:map id="myMapping" key-type="com.acme.MyEnum">
<entry key="ENUM1" value="value1" />
<entry key="ENUM2" value="value2" />
</util:map>
MyEnum类是一个简单的类:
public enum MyEnum
{
ENUM1,
ENUM2
}
在创建应用程序上下文时,Spring会抛出此异常:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'myMapping':
Error converting typed String value for bean property 'sourceMap';
nested exception is org.springframework.beans.ConversionNotSupportedException:
Failed to convert value of type 'java.lang.String' to required type
'com.acme.MyEnum'; nested exception is java.lang.IllegalStateException:
Cannot convert value of type [java.lang.String] to required type
[com.acme.MyEnum]: no matching editors or conversion strategy found
(格式化以提高可读性)
由于给定的密钥类型,我希望Spring将字符串“ENUM1”转换为“MyEmum.ENUM1”
key-type="com.acme.MyEnum"
在映射bean声明中。
我知道如何通过使用<entry>
,使用枚举等的完全限定类名来执行备用bean定义来解决这个问题...但我想建立定义,以便于阅读。
这是我知道的错误还是缺乏理解?
非常感谢你的帮助!
答案 0 :(得分:0)
您可以尝试将此策略用于字符串转换。
public enum MyEnum
{
ENUM1("ENUM1"),
ENUM2("ENUM2")
}
答案 1 :(得分:0)
实际上,你如何使用utils-map似乎是正确的,但问题可能在其他地方。
我不知道你是如何注入创建的myMapping bean的。如果您使用@Autowired,则可能是您获得此异常的原因。您应该使用@Resource(name="myMapping")
代替@Autowired
。 See this ticket
我已经测试了它并且它有效。如果你想看看如何,我创建了一个示例项目并推送到github。 Follow this link
我希望它有所帮助。