Spring 3.2.4无法在<util:map ...>中将String转换为Enum,尽管指定了'key-type'</util:map ...>

时间:2014-11-15 15:03:21

标签: java xml spring map enums

我正在尝试使用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定义来解决这个问题...但我想建立定义,以便于阅读。

这是我知道的错误还是缺乏理解?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

您可以尝试将此策略用于字符串转换。

public enum MyEnum
{
    ENUM1("ENUM1"),
    ENUM2("ENUM2")
}

答案 1 :(得分:0)

实际上,你如何使用utils-map似乎是正确的,但问题可能在其他地方。

我不知道你是如何注入创建的myMapping bean的。如果您使用@Autowired,则可能是您获得此异常的原因。您应该使用@Resource(name="myMapping")代替@AutowiredSee this ticket

我已经测试了它并且它有效。如果你想看看如何,我创建了一个示例项目并推送到github。 Follow this link

我希望它有所帮助。