in src/main/java/com/aliyun/tea/TeaModel.java [358:478]
public static Object confirmType(Class expect, Object object, String objectName) {
BigDecimal bigDecimal;
if (String.class.isAssignableFrom(expect)) {
if (object instanceof Number || object instanceof Boolean) {
logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, String.class.getName(), object.getClass().getName(), object.toString());
return object.toString();
}
if (object instanceof Map || object instanceof List) {
logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, String.class.getName(), object.getClass().getName(), object.toString());
return new Gson().toJson(object);
}
} else if (Boolean.class.isAssignableFrom(expect)) {
if (object instanceof String) {
logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Boolean.class.getName(), object.getClass().getName(), object.toString());
return Boolean.parseBoolean(String.valueOf(object));
} else if (object instanceof Number) {
if (object.toString().equals("1")) {
logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Boolean.class.getName(), object.getClass().getName(), object.toString());
return true;
} else if (object.toString().equals("0")) {
logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Boolean.class.getName(), object.getClass().getName(), object.toString());
return false;
}
}
} else if (Integer.class.isAssignableFrom(expect)) {
if (object instanceof String) {
try {
Integer.parseInt(object.toString());
} catch (NumberFormatException e) {
logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Integer.class.getName(), object.getClass().getName(), object.toString());
}
bigDecimal = new BigDecimal(object.toString());
return bigDecimal.intValue();
}
if (object instanceof Boolean) {
logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Integer.class.getName(), object.getClass().getName(), object.toString());
return object.toString().equalsIgnoreCase("true") ? 1 : 0;
}
if (object instanceof Long) {
if ((Long) object > Integer.MAX_VALUE) {
logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Integer.class.getName(), object.getClass().getName(), object.toString());
}
bigDecimal = new BigDecimal(object.toString());
return bigDecimal.intValue();
}
if (object instanceof Float || object instanceof Double) {
bigDecimal = new BigDecimal(object.toString());
logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Integer.class.getName(), object.getClass().getName(), object.toString());
return bigDecimal.intValue();
}
} else if (Long.class.isAssignableFrom(expect)) {
if (object instanceof String || object instanceof Integer) {
try {
Long.parseLong(object.toString());
} catch (NumberFormatException e) {
logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Long.class.getName(), object.getClass().getName(), object.toString());
}
bigDecimal = new BigDecimal(object.toString());
return bigDecimal.longValue();
}
if (object instanceof Float || object instanceof Double) {
bigDecimal = new BigDecimal(object.toString());
logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Long.class.getName(), object.getClass().getName(), object.toString());
return bigDecimal.longValue();
}
} else if (Float.class.isAssignableFrom(expect)) {
if (object instanceof String) {
try {
Float.parseFloat(object.toString());
} catch (NumberFormatException e) {
logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Float.class.getName(), object.getClass().getName(), object.toString());
}
bigDecimal = new BigDecimal(object.toString());
return bigDecimal.floatValue();
}
if (object instanceof Double) {
if ((Double) object > Float.MAX_VALUE) {
logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Float.class.getName(), object.getClass().getName(), object.toString());
}
bigDecimal = new BigDecimal(object.toString());
return bigDecimal.floatValue();
}
if (object instanceof Integer || object instanceof Long) {
bigDecimal = new BigDecimal(object.toString());
logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Float.class.getName(), object.getClass().getName(), object.toString());
return bigDecimal.floatValue();
}
} else if (Double.class.isAssignableFrom(expect)) {
if (object instanceof String || object instanceof Float) {
try {
Double.parseDouble(object.toString());
} catch (NumberFormatException e) {
logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Double.class.getName(), object.getClass().getName(), object.toString());
}
bigDecimal = new BigDecimal(object.toString());
return bigDecimal.doubleValue();
}
if (object instanceof Integer || object instanceof Long) {
bigDecimal = new BigDecimal(object.toString());
logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
objectName, Double.class.getName(), object.getClass().getName(), object.toString());
return bigDecimal.doubleValue();
}
}
return object;
}