如果输入不是数字
,我发现这行代码出错了int sum = Integer.parseInt(request.getParameter("sum"));
错误消息是
type Exception report
message
descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: "a"
root cause
java.lang.NumberFormatException: For input string: "a"
如果输入是字符串或null,如何处理输入?
感谢
答案 0 :(得分:3)
首先应确保请求参数不为空且仅包含数字:
if (request.getParameter("sum") != null &&
request.getParameter("sum").matches("^\\d+$"))
int sum = Integer.parseInt(request.getParameter("sum"));
答案 1 :(得分:2)
尝试:
int sum = 0;
try {
sum = Integer.parseInt(request.getParameter("sum"));
}
catch (NumberFormatException e) {
// sum = 0. If you needed to do anything else for invalid input
// put it here.
}
答案 2 :(得分:1)
抓住异常并相应处理:
int sum;
try {
sum = Integer.parseInt(request.getParameter("sum"));
}
catch {
//do something if invalid sum
}
答案 3 :(得分:1)
这实际上取决于如果sum不是数字应该怎么做。
try{
int sum = Integer.parseInt(request.getParameter("sum"));
}
catch(Exception e)
{
//how do you want to handle it? like ask the user to re-enter the values
}
答案 4 :(得分:1)
试试这个:
try {
sum = Integer.parseInt(request.getParameter("sum"));
} catch (NumberFormatException e) {
... // handle if the string isn't a number
} catch (NullPointerException e) {
... // handle if it's null
}
答案 5 :(得分:1)
在使用Integer.parseInt之前检查null,还可以检查输入是否包含非数字值
答案 6 :(得分:1)
这是一种不涉及抛出和捕获异常的不同方法:
String input = request.getParameter("sum");
// Validate the input using regex
if (input == null || !input.matches("^-?\\d{1,8}$")) {
// handle bad input, eg throw exception or whatever you like
}
int sum = Integer.parseInt(input);
请注意,此正则表达式不允许数字太大,并允许负数
答案 7 :(得分:1)
我看到org.apache.jasper.JasperException
这意味着它在JSP中?如果您要将类似的代码添加到JSP中,您可能需要重新考虑您正在做的事情。理想情况下,您应该在某种控制器中处理诸如输入验证之类的事情,然后将结果传递给JSP的模板以进行渲染。
有许多框架可以帮助解决这类问题,并且通常它们值得使用,因为您的Web应用程序将受益于框架作者在安全领域已经完成的所有工作。 ..
如果您只想破解它,那么已发布的六个代码答案中的任何一个都会对您有用。