0

我想知道如何处理这种情况以及您对此有何建议。

我的 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,就是抛出空指针异常。

所以我的问题是: 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);
       }

这解决了发送空字符串的问题,因为 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 的更好方法吗?

再次感谢

4

2 回答 2

1

RuntimeExceptions like NullPointerExceptions 通常表示程序员在代码中的错误。即它是错误。您不应该抓住它们,而是通过适当地预先检查来避免它们。在您的特定情况下,您错误地将其包装在另一个new String(). 如果属性是null,它会抛出NullPointerException那个。删除它。

例如

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);
}
于 2012-04-24T23:30:53.367 回答
1

最好csvString用空值而不是null. 所以它总是会转到jsp,如果你有一些有效的值,你将渲染,否则你将在视图中显示为空。

另外请避免在 jsp 中使用 scriptlet 代码。它不可维护。

于 2012-04-24T23:31:57.433 回答