我想知道如何处理这种情况,你对此有何看法?
我的JSP中有一个空指针异常。
String csvDataIn = new String ((String)request.getAttribute("csvString"));
这是因为我在spring中创建了一个Controller,以便处理对DB的查询并获得csvString。一切都工作正常,直到我做出一个失败的查询。
所以,在控制器中:
...
JsonNode json = dataRepository.getDataAsJson(dataNode);
csvString = getCSVfromJsonNode(json);
model.addAttribute("csvString", csvString);
} catch (Exception e) {
Logger.log("CSV controller failed", _moduleClass, e);
}
return "exportCSV";
}
因此变量json永远不会填充它,因为函数getDataAsJson()失败了。所以这是一个例外。然后我返回到exportCSV.jsp,但我没有在模型中返回属性csvString。
因此,回到jsp,抛出nullpointer异常。
所以我的问题是: a-如何在JSP中捕获此异常? b-你认为一个更好的解决方案,而不是在JSP中捕获异常吗?我的意思是这可能是最好的做法。
提前致谢。
感谢您的回复。他们真的很好帮助:我做了以下修改以解决问题。
...
JsonNode json = dataRepository.getDataAsJson(dataNode);
model.addAttribute("csvString", csvString);
} catch (Exception e) {
Logger.log("CSV controller failed", _moduleClass, e);
}
return "exportCSV";
csvString = getCSVfromJsonNode(json);
}
这解决了发送Null String的问题,因为csvString是之前创建的bean,为空。
我在这里遇到的异常是javax.xml.ws.webserviceexception无法发送消息(您知道在控制器上处理此问题的更好方法吗?)
我也在jsp方面这样做,以防万一:
String csvDataIn = (String)request.getAttribute("csvString");
//This should never happen, but we check anyway.
if (csvDataIn != null){
...
}
所以我唯一可以怀疑的是:你知道在控制器上处理javax.xml.ws.webserviceexception的更好方法吗?
再次感谢
答案 0 :(得分:1)
RuntimeException
这样的{p> NullPointerException
通常表示程序员在代码中的错误。即这是错误。你不应该抓住它们,但要通过正确预先检查来避免它们。在您的特定情况下,您错误地将其包装在另一个new String()
中。如果属性为null
,则会在其上抛出NullPointerException
。删除它。
E.g。
String csvDataIn = (String) request.getAttribute("csvString");
if (csvDataIn != null) {
// Do your job here.
}
else {
// Just ignore it?
}
但毕竟,业务逻辑确实不属于JSP。您应该在控制器中完成这项工作,并为JSP 完全提供装饰某些HTML所需的数据。如果在控制器中遇到非常不可恢复的异常,请将其重新抛出为ServletException
。它最终会出现在容器的默认错误页面中,或者在<error-page>
中指定为web.xml
的页面。
} catch (Exception e) { // Please be more specific.
throw new ServletException("Converting to CSV failed", e);
}
答案 1 :(得分:1)
最好使用空值而不是csvString
初始化null
。因此它总是会转到jsp,如果你有一些有效的值你会渲染,否则你将在视图中显示为空。
另外请避免在jsp中使用scriptlet代码。它不可维护。