当我为项目部署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)
答案 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}')}" />
这对我很有用。