JAVA 后台全局异常控制

一、为什么要进行异常控制

为什么要进行异常控制,在我们开发中,异常是最常见的问题,也是最不愿意看见的问题。但是我们也不得不看见,利用好异常能使我们快速成长,也能让开发人员快速定位异常,设计好了异常控制,能控制到这个异常是由谁产生的,何时产生的,产生的数据是什么,异常的方法是哪个,异常信息是什么等等,当我们利用好这些异常信息和数据,能让我们在开发过程中节约一部分时间和找问题的时间。
二、异常重现

例子1:我们在开发过程中,开发完成,对接也完成了,有一些异常还是会出来,而且这种异常是不定出现,可能这次操作出现异常,下次一样的操作就不会出现异常,这种异常在我们进行对接调试的时候非常麻烦,调试这个异常需要花费很长的时间。
例子2:我们在进行开发的时候,我们在进行对接调试的时候,日志会滚动很快,即使有异常也很难定位到异常信息位置,这样就会导致开发人员在定位异常上面花费时间,重新去点击这个异常出现,进行调试,这样也很花费时间。
例子3:当应用进行上线后,测试很科学,也没有发现任何异常,但是有的异常很奇怪,莫明的出现,这个时候我们就得去翻日志,在最开始的时候日志系统会全盘开着,每天可能就是多少个G的日志,要从中去找异常那犹如就是大海捞针,费神又费力。
有了这个异常控制以后,我们就可以在异常里面快速定位这个异常,异常的参数是什么,异常的异常信息是什么,如果根据异常信息读取找出问题所在方法和行数,如果实在找不出来,直接进行异常参数自我验证,找出异常原因,从而进行异常重现。
三、实现原理

1、整合spring实现异常拦截

         实现spring的接口HandlerExceptionResolver重写resolveException该方法,配置bean为<bean id="exceptionResolver" class="com.xxx.xxx.xxExceptionHandler"/>,r如果采用注解,直接在类xxExceptionHandler注解@Component即可。该方法提供了几个参数,参数为:
(一)HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息
(二)HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。查看HttpServletResponse的API,可以看到这些相关的方法。
(三)Object对象包含了该请求的方法所有信息,通过这个对象提供的方法,可以获取到请求的控制器和方法。
(四)Exception对象包含了该请求的异常信息,通过这个对象可以获取到异常信息。
2、信息提取

在这一步非常的重要,数据提取好了可以直接定位异常,所以下一步说明数据提取。
(一)获取请求链接:
String url = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getServletPath();
(二)获取服务器IP
String serviceIp = request.getLocalAddr();
(三)获取客户端IP
String clientIp = request.getRemoteAddr();
(四)获取请求类型
String httpMethod = request.getScheme();
(五)获取字符集
String charEncoding = request.getCharacterEncoding();
(六)获取请求参数
Map<String, String[]> parameters = request.getParameterMap();
参数可以后期加工,是用JSON呢还是拼接成请求链接呢,都是可以的。
(七)获取异常控制器+方法
前面所提的参数第三点,Object就是请求异常的控制器和方法,可以强转为HandlerMethod获取更多信息,例如获取到只有控制器完整结果,但是获取到的结果和直接Object没得多大区别,都能定位到方法去。
(八)获取异常信息
前面所提参数Exception就是异常信息,直接使用就可以了,这个里面包含了异常完整信息。
3异常重现方式

这些异常存储到数据库,在进行一些手段控制,直接定位该异常是某个开发人员,开发人员解决没有,解决的时间是多久,等等....。
可以做一个后台异常信息管理,查看异常信息,如果异常信息中查看不出来问题,可以直接浏览器模拟发送请求,进行异常重现调试,这样非常快捷,为开发人员节省异常调试时间。可能在前期做这个异常管理期间会消耗一部分时间,总的来说做了这个异常管理,方便快捷舒适。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java全局异常控制可以通过自定义异常处理器来实现自定义返回编码。具体步骤如下: 1. 自定义异常类,继承自Exception或RuntimeException类。 2. 在异常类中定义自己的返回编码,例如: ``` public class MyException extends RuntimeException { private String code; public MyException(String code, String message) { super(message); this.code = code; } public String getCode() { return code; } } ``` 3. 定义全局异常处理器,实现ExceptionHandler接口,并在类上加上@ControllerAdvice注解。 4. 在全局异常处理器中编写异常处理方法,对不同的异常类型进行处理,并根据异常类型抛出自定义的异常,例如: ``` @ControllerAdvice public class GlobalExceptionHandler implements ExceptionHandler<Exception> { @Override public ResponseEntity<Object> handleException(Exception ex) { if (ex instanceof NullPointerException) { throw new MyException("001", "空指针异常"); } else if (ex instanceof IllegalArgumentException) { throw new MyException("002", "参数异常"); } else { throw new MyException("999", "系统异常"); } } @ExceptionHandler(MyException.class) public ResponseEntity<Object> handleMyException(MyException ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ErrorResponse(ex.getCode(), ex.getMessage())); } } ``` 5. 在自定义异常类中定义返回给客户端的错误信息,例如: ``` public class ErrorResponse { private String code; private String message; public ErrorResponse(String code, String message) { this.code = code; this.message = message; } public String getCode() { return code; } public String getMessage() { return message; } } ``` 6. 客户端在接收到异常响应时,根据返回的错误码进行相应的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值