Tag: error handling

Spring Rest ErrorHandling @ControllerAdvice / @Valid

我在REST控制器中一起使用@ControllerAdvice和@Valid注释时遇到了麻烦。 我有一个rest控制器声明如下: @Controller public class RestExample { … /** * user1passwordNameSurname * curl -d “@restAddRequest.xml” -H “Content-Type:text/xml” http://localhost:8080/SpringExamples/servlets/rest/add */ @RequestMapping(value=”rest/add”, method=RequestMethod.POST) public @ResponseBody String add(@Valid @RequestBody XmlRequestUser xmlUser) { User user = new User(); user.setUsername(xmlUser.getUsername()); user.setPassword(xmlUser.getPassword()); user.setName(xmlUser.getName()); user.setSurname(xmlUser.getSurname()); // add user to the database StaticData.users.put(xmlUser.getUsername(), user); LOG.info(“added user ” + xmlUser.getUsername()); return “added user ” […]

如何正确处理错误日志?

在发布此问题之前,我尝试进行多次搜索。 如果这是重复,请告诉我,我将删除它。 我的问题围绕处理通过我们的Web应用程序产生的错误的正确方法。 我们目前通过log4j记录所有内容。 如果发生错误,它只是说“发生了错误。已经通知IT部门,并将在屏幕上尽快纠正此错误”。 这告诉用户没什么……但是当我们尝试重现错误时,它也没有告诉开发人员任何事情。 我们必须转到错误日志文件夹并尝试查找此错误。 我还要提一下,该文件夹中充满了过去一周的日志。 每次出现错误时,都会为该用户创建一个日志文件,并将电子邮件发送给分配给处理错误的IT人员。 此电子邮件未提及日志文件名,但它是日志文件中写入的相同错误文本的副本。 因此,如果Alicia在7:15遇到问题,但在同一分钟发生了10个其他错误,我必须通过每个日志文件试图找到她的。 我向同事提议的是在数据库中添加一个错误日志表。 这会为每个错误写一条记录,记录它的用途,错误,它发生的页面等等。这样做的好处是我们可以从表中返回主键值(error_log_id)和显示在页面上有一条消息,例如“错误参考ID(1337)已被记录,并且已通知正确的IT人员。请保留此参考ID以方便将来使用”。 当我们收到电子邮件时,它会告诉我们错误的ID以便快速参考。 或者如果用户是持久的,他们可以使用id与我们联系,我们可以很快找到错误。 如何设置错误记录? 顺便说一下,我们的系统使用连接到SQL Server数据库的Java Servlet。

如何从close()正确处理IOException

Java I / O类java.io.Reader , java.io.Writer , java.io.InputStream , java.io.OutpuStream及其各种子类都有一个close()方法,可以抛出IOException 。 对于处理此类例外的正确方法是否有任何共识? 我经常看到建议只是默默地忽略它们,但这感觉不对,至少在开放写入资源的情况下,关闭文件时出现问题可能意味着无法写入/发送未刷新的数据。 另一方面,在阅读资源时,我完全不清楚为什么close()可能抛出以及该怎么做。 那么有任何标准建议吗? 一个相关的问题是, close是否会抛出IOException? ,但更多的是关于哪些实现真正抛出,而不是如何处理exception。

IllegalAccessError和IllegalAccessException之间的区别

考虑这对Throwable : IllegalAccessException extends Exception 当应用程序尝试reflection性地创建实例(数组除外),设置或获取字段或调用方法时抛出,但当前正在执行的方法无法访问指定类,字段,方法或构造函数的定义。 IllegalAccessError ext IncompatibleClassChangeError ext LinkageError ext Error 如果应用程序尝试访问或修改字段,或调用其无权访问的方法,则抛出该exception。 通常,编译器会捕获此错误; 如果类的定义不兼容地更改,则此错误只能在运行时发生。 问题 有人可以给出一个代码示例,其中每个被抛出? 名字的相似性是否意味着两者之间的关系,还是仅仅是纯粹的巧合? 还有其他XXXError和XXXException组合吗? 这些对是如何相互关联的? 如果您明确try在Exception/Error对中catch一个,您是否还应该catch另一个?

Java SDK for REST API服务的error handling

我们正在构建Java SDK以简化对提供REST API的服务的访问。 此SDK将由第三方开发人员使用。 我很难找到最适合在Java语言中实现error handling的模式。 假设我们有其余的端点: GET /photos/{photoId} 。 这可能会返回以下HTTP状态代码: 401:用户未经过身份validation 403:用户无权访问此照片 404:没有带有该ID的照片 该服务看起来像这样: interface RestService { public Photo getPhoto(String photoID); } 在上面的代码中,我还没有解决error handling问题。 我显然希望为sdk的客户端提供一种方法来知道发生了哪个错误,以便从中恢复。 Java中的error handling是使用Exceptions完成的,所以让我们继续。 但是,使用exception执行此操作的最佳方法是什么? 1.有一个关于错误信息的例外。 public Photo getPhoto(String photoID) throws RestServiceException; public class RestServiceException extends Exception { int statusCode; … } 然后sdk的客户端可以执行以下操作: try { Photo photo = getPhoto(“photo1”); } catch(RestServiceException […]

将有用的状态信息传递给Java中的exception有什么好方法?

我最初注意到我的问题引起了一些困惑。 我不是在询问如何配置记录器,也不是如何正确使用记录器,而是如何捕获本地记录级别低于exception消息中当前日志记录级别记录的所有信息。 我一直在注意Java中的两种模式,用于记录在发生exception时可能对开发人员有用的信息。 以下模式似乎很常见。 基本上,您只需根据需要在线记录您的记录器日志信息,以便在发生exception时获得日志跟踪。 try { String myValue = someObject.getValue(); logger.debug(“Value: {}”, myValue); doSomething(myValue); } catch (BadThingsHappenException bthe) { // consider this a RuntimeException wrapper class throw new UnhandledException(bthe); } 上述方法的缺点是,如果您的用户需要相对安静的日志并且需要高级别的可靠性,而他们无法“在调试模式下再次尝试”,则exception消息本身包含的数据不足以对开发者有用。 我看到的下一个模式试图缓解这个问题,但看起来很难看: String myValue = null; try { myValue = someObject.getValue(); doSomething(myValue); } catch (BadThingsHappenException bthe) { String pattern = “An error occurred when […]

继续收到错误插入变量声明以在我的Java程序上完成VariableDeclaration

保持错误,我是Java的新手。 我不断收到有关变量声明的错误。 建议吗? public class Trying { public static void main(String[] args) { nestedFor; int i =0; } public static void nestedFor(int) { int i = 0; int h =0; for (int = i; i<=4; i++) for (int = h; i <=6; h++) System.out.println ("Testing 1,2,3"); } }

我的Java版本是最新版本,但我的JVM仍然是1.5?

最近我尝试使用Eclipse但是当我打开它时,它告诉我我的JVM版本太旧了 Incompatible JVM Version 1.5.0_05 of the JVM is not suitable for this product. Version: 1.6 or greater is required 令我感到奇怪的是,’我的java版本是最新版本。 我也尝试从Oracle安装最新版本… jre,jdk或者其他什么,每次启动Eclipse都会出现同样的错误 请不要告诉我编辑”eclipse.ini”的数据从1.6到1.5,因为我曾经尝试过并通过保存.class文件来获取错误.E

如何使用Spring Security在login.jsp页面上显示登录错误消息?

我正在使用Spring Security。 我想在login.jsp上显示登录错误消息,例如登录失败或帐户锁定。 如何在登录页面上显示此类消息?

显示SQL错误消息

我在我的java项目中使用JDBC连接到MySQL。 我在mySQL表中实现了一些检查约束。 我有一个表单,用户输入一些值并将其提交到MySQL表。 如果违反约束,Java会给出SQLException。 我的目的是显示一个弹出消息,告知我的表中违反了哪些条件。 如何在java中检索此信息? 我尝试了一个记录器,但它只在控制台中显示一条冗长的错误消息。