话不多说,先上代码:
String value = String.valueOf(conditionMap.get(reason));
return StringUtils.isEmpty(value) ? -1 : Integer.valueOf(value);
按照预期,conditionMap获取不到值,最后应该return一个-1,但是实际却抛了异常,
java.lang.NumberFormatException: For input string: "null"
debug一下,发现了问题
发现value并不是null,而是"null",看下String.valueOf的实现,原来坑就在这里:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
发现问题之后很好解决,增加一个判断即可
String value = String.valueOf(conditionMap.get(reason));
return StringUtils.isEmpty(value) || "null".equals(value) ? -1 : Integer.valueOf(value);
因此以后在使用String.valueOf的时候需要注意这个坑,"null"的不注意,也很可能带来脏数据或者放过一些非法请求,对线上服务带来影响