如何在Spring配置文件中初始化布尔值?

时间:2015-07-14 20:17:39

标签: java spring

事实上,我已经找到了答案,但还没有找到解决方案。而且,我是一个完整的春季菜鸟,并继承了这个问题......

当我为项目部署WAR文件时,它引用了从String到Boolean的转换失败。详细说明:

Spring配置文件包含此(编辑)元素:

<property name="logTypes">
    <map>
        <entry key="MESSAGE" value="${xxx.messagelogenabled}" />
        <entry key="SUMMARY" value="${xxx.summarylogenabled}" />
        <entry key="STATISTICS" value="true" />
        <entry key="ERROR" value="true" />
        <entry key="WARNING" value="true" />
        <entry key="DEBUG" value="${xxx.debuglogenabled}" />
    </map>
</property>

“xxx。* logenabled”字符串在别处被定义为“true”或“false”,但即使我用“true”替换这些引用,这也会失败。

“logTypes”属性的setter是:

public void setLogTypes(Map<String, Boolean> logTypesMap)
{ /* I think the problem is with Spring creating the argument
     to this method, not the method itself */ }

我收到以下运行时错误但部署失败:

Error setting property values;
nested exception is org.springframework.beans.PropertyBatchUpdateException;
nested PropertyAccessExceptions (1) are:
   PropertyAccessException 1:
      org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.util.LinkedHashMap] to required type [java.util.Map] for property 'logTypes';
      nested exception is java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean

以下是我正在运行的Java版本:

% java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

2 个答案:

答案 0 :(得分:2)

您可以为地图指定密钥类型和值类型

<property name="logTypes">

    <map key-type="java.lang.String" value-type="java.lang.Boolean">

        <entry key="MESSAGE" value="${xxx.messagelogenabled}" />
        <entry key="SUMMARY" value="${xxx.summarylogenabled}" />
        <entry key="STATISTICS" value="true" />
        <entry key="ERROR" value="true" />
        <entry key="WARNING" value="true" />
        <entry key="DEBUG" value="${xxx.debuglogenabled}" />
    </map>
</property>

答案 1 :(得分:0)

我在这里看到的另一种方法是使用类型转换 使用java代码

<property name="MESSAGE" value="#{T(java.lang.Long).parseLong('${xxx.messagelogenabled}')}" />

这对我很有用。