我有一个Spring应用程序,并使用Hibernate实现持久性。
我有一桌车。每辆车都有一个唯一的ID。
我的应用程序中有一个网页列出了所有的车辆(www.example.com/ vehicles )。单击链接可以通过车辆ID的GET参数(www.example.com/vehicles?id=1234)访问该车辆的详细信息页。
这一切都很好,因为如果从表中删除车辆,该车辆将不再出现在列出所有车辆的页面上,因此没有可单击的链接。
但是,如果有人提供了一个不存在的车辆的id (例如,他们已经标记了某一特定车辆的路径,但该车辆已经被删除-)。www.example.com/vehicles?id=1234)而且该车辆已不在数据库中,有一个例外。
Vehicle vehicle = vehicleDAO.findById(id);
Validate.notNull(vehicle, "There is no vehicle by this ID.");,我的控制器将到达这几行,并将抛出一个IllegalArgumentException在线上与Validate.notNull。我如何编写一个站点范围的处理程序,以便优雅地告诉网站访问者Validate.notNull语句中显示的消息?
我认为Validate.notNull语句在我的代码中很有用,我希望将它们的消息一直发送到浏览器窗口,这样访问者就不会只看到一些通用的500个错误页面。
这不仅适用于我的车桌,也适用于任何东西。
如果有一段代码能很好地处理整个站点上所有控制器的这个问题,那就太好了。
谢谢!
发布于 2011-09-17 00:18:19
我觉得你不应该那样做。您要做的是处理所有在控制器之外传播的IllegalArgumentExceptions,前提是它们都可以/应该向最终用户报告。这不是很好的实践,因为Spring (和其他库)在各种事情上都使用这个例外。
你需要治疗这是个特例。编写一个特殊的验证器来测试已删除的车辆情况,并让它抛出一个自定义异常。然后要么在控制器中显式地处理这一点,要么在更一般的情况下处理。
发布于 2011-09-17 13:01:47
您应该在服务层检查id的正确性。如果id不正确,则抛出自定义异常并处理它。
https://stackoverflow.com/questions/7451521
复制相似问题