提交 8c85e4a9 编写于 作者: A Andy Clement

will now throw exception if trying to cram a long into an int that will not fit

上级 d8320522
...@@ -70,7 +70,8 @@ public class StandardTypeConverter implements TypeConverter { ...@@ -70,7 +70,8 @@ public class StandardTypeConverter implements TypeConverter {
// TODO 3 Q In case of a loss in information with coercion to a narrower type, should we throw an exception? // TODO 3 Q In case of a loss in information with coercion to a narrower type, should we throw an exception?
public Object convertValue(Object value, Class<?> targetType) throws SpelException { public Object convertValue(Object value, Class<?> targetType) throws SpelException {
if (value==null || value.getClass()==targetType) return value; if (value == null || value.getClass() == targetType)
return value;
Map<Class<?>, StandardIndividualTypeConverter> possibleConvertersToTheTargetType = converters.get(targetType); Map<Class<?>, StandardIndividualTypeConverter> possibleConvertersToTheTargetType = converters.get(targetType);
if (possibleConvertersToTheTargetType == null && targetType.isPrimitive()) { if (possibleConvertersToTheTargetType == null && targetType.isPrimitive()) {
if (targetType == Integer.TYPE) if (targetType == Integer.TYPE)
...@@ -95,12 +96,12 @@ public class StandardTypeConverter implements TypeConverter { ...@@ -95,12 +96,12 @@ public class StandardTypeConverter implements TypeConverter {
StandardIndividualTypeConverter aConverter = possibleConvertersToTheTargetType.get(value.getClass()); StandardIndividualTypeConverter aConverter = possibleConvertersToTheTargetType.get(value.getClass());
if (aConverter != null) { if (aConverter != null) {
try { try {
result = aConverter.convert(value); result = aConverter.convert(value);
} catch (EvaluationException ee) { } catch (EvaluationException ee) {
if (ee instanceof SpelException) { if (ee instanceof SpelException) {
throw (SpelException)ee; throw (SpelException) ee;
} else { } else {
throw new SpelException(SpelMessages.PROBLEM_DURING_TYPE_CONVERSION,ee.getMessage()); throw new SpelException(SpelMessages.PROBLEM_DURING_TYPE_CONVERSION, ee.getMessage());
} }
} }
} }
...@@ -265,9 +266,14 @@ public class StandardTypeConverter implements TypeConverter { ...@@ -265,9 +266,14 @@ public class StandardTypeConverter implements TypeConverter {
public Object convert(Object value) throws SpelException { public Object convert(Object value) throws SpelException {
if (value instanceof Integer) if (value instanceof Integer)
return ((Integer) value).intValue(); return ((Integer) value).intValue();
else if (value instanceof Long) else if (value instanceof Long) {
return ((Long) value).intValue(); try {
else return Integer.parseInt(((Long) value).toString());
} catch (NumberFormatException nfe) {
throw new SpelException(SpelMessages.PROBLEM_DURING_TYPE_CONVERSION, "long value '" + value
+ "' cannot be represented as an int");
}
} else
return null; return null;
} }
...@@ -276,7 +282,7 @@ public class StandardTypeConverter implements TypeConverter { ...@@ -276,7 +282,7 @@ public class StandardTypeConverter implements TypeConverter {
} }
public Class<?> getTo() { public Class<?> getTo() {
return Integer.TYPE; return Integer.class;
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册