`

自定义异常-统一记录-拦截器

 
阅读更多

1.产生异常代码

String a = "a3";
intb = Integer.parseInt(a);

 

2.自定义异常类

继承关系:DataAccessException 继承ServiceExceptioextends RestWebServiceException继承Exception

这样做的好处就是:dao层异常抛DataAccessException 这样service层可以覆盖到(子类的异常)然后在网上抛,到rest层,抛RestWebServiceException (也是可以getservice层异常的)

最后统一由拦截器,拦截所以异常然后统一处理。这样做的好处是可以打印错误的行数-好定位问题。

如果自己try catch了,那么在try内报错只在throw Exception时记录行数,也就是这能记录throw那一行无法定位try里哪一行

publicclass DataAccessException extends ServiceException {
	privatestaticfinallongserialVersionUID = 1L;
	private String retCd; // 异常对应的返回码
	private String msgDes; // 异常对应的描述信息

	public DataAccessException() {
		super();
	}

	public DataAccessException(String message) {
		super(message);
		msgDes = message;
	}

	public DataAccessException(String retCd, String message) {
		super();
		this.retCd = retCd;
		this.msgDes = message;
	}
	public DataAccessException( Throwable throwable) {
		super(throwable);
	}
	public DataAccessException(String message,Throwable throwable) {
		super(message,throwable);
		msgDes = message;
	}
	public DataAccessException(String retCd, String message,Throwable throwable) {
		super(message,throwable);
		this.retCd = retCd;
		this.msgDes = message;
	}

 

publicclass ServiceException extends RestWebServiceException {
	privatestaticfinallongserialVersionUID = 1L;
	private String retCd; // 异常对应的返回码
	private String msgDes; // 异常对应的描述信息
。。。同上

 

publicclass RestWebServiceException extends Exception {
	privatestaticfinallongserialVersionUID = 1L;
	private String retCd; // 异常对应的返回码
	private String msgDes; // 异常对应的描述信息

 

看看,到层和service层,rest层如何处理的

//service层直接抛出异常即可
	publicint addComUser(ComUser user) throwsServiceException{
		return comUserMapper.insert(user);
	}

 

看看拦截器如何实现:
/**
 * 异常拦截器
 * @author:andy
 * @version:1.0
 */
publicclass ErrorInterceptor extends AbstractPhaseInterceptor<Message> {
	Logger logger = LoggerFactory.getLogger(getClass());  
	public ErrorInterceptor(String phase) {
		super(phase);
	}
	public ErrorInterceptor(){  
super(Phase.RECEIVE);  
    } 

	@Override
	publicvoid handleMessage(Message msg) throws Fault {
	}
	//出现错误输出错误信息和栈信息  
publicvoid handleFault(Message message) {  
//可以拦截所以异常除了WebApplicationException
        Exception exeption=message.getContent(Exception.class); 
logger.error(exeption.getMessage(),exeption);//只有logger.xxx("",e);2个参数的可以打印异常详细信息,其他参数的函数都不行
    }  
}

 

//rest层,也是直接抛出异常,不要自己try catch。
@GET
	@Path("/getUserById/{id}")
	public ComUser getComUserById(@PathParam("id") intid) throws RestWebServiceException{
		ComUser user = null;
		user = comUserService.getComUserById(id);
		//业务返回
		if(null == user){
			ResponseBuilder builder = Response.status(Status.BAD_REQUEST);
			builder.type(MediaType.APPLICATION_JSON);
			builder.entity(new ResultJson(ResultJson.FAILURE,"访问数据不存在"));
			thrownew WebApplicationException(builder.build());
		}
		
		return user;
	}

 

分享到:
评论

相关推荐

    代码生成器-可自定义模版-guns

    9. 控制器层统一的异常拦截机制,利用@ControllerAdvice统一对异常拦截,具体见com.stylefeng.guns.core.aop.GlobalExceptionHandler类。 10. 页面统一的js key-value单例模式写法,每个页面生成一个唯一的全局变量,...

    自定义拦截器(实现异常处理+细颗粒权限控制).zip

    在这个“自定义拦截器(实现异常处理+细颗粒权限控制)”的项目中,我们将深入探讨如何利用拦截器进行异常管理和权限控制。 首先,拦截器在Struts2中的工作原理是基于AOP(面向切面编程)的概念。当一个请求被发送...

    SpringMVC 中的拦截器与异常处理

    在SpringMVC框架中,拦截器(Interceptor)和异常处理是两个重要的概念,它们对于构建健壮、可维护的Web应用程序至关重要。本文将深入探讨这两个主题,并解释它们如何协同工作以提升应用性能和用户体验。 首先,让...

    理解拦截器用于在某个方法或字段被访

    通过这种方式,开发者可以根据需求自定义拦截器链,实现特定的功能。 4. **应用场景** - **日志和追踪**:记录请求的详细信息,用于调试和性能分析。 - **安全性**:进行身份验证和授权,确保只有合法用户能访问...

    Asp.net Mvc身份验证、异常处理、权限验证(拦截器)源码

    拦截器是AOP(面向切面编程)的一部分,可以在操作执行前后执行额外的逻辑,如日志记录、性能跟踪、事务管理等。在Asp.NET MVC中,拦截器可以通过实现`IActionFilter`、`IAuthorizationFilter`、`IResultFilter`等...

    SpringMVC拦截器例子详解

    - 自定义拦截器需要继承`HandlerInterceptor` 或 `HandlerInterceptorAdapter` 类,并重写相关方法。 - `preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)`:在请求处理之前...

    struts2拦截器

    Struts2 拦截器是基于 Java 的开源框架 Apache Struts 2 中的一个核心功能,它允许开发者在请求处理之前、之后或者整个过程中插入自定义的逻辑。拦截器是 Struts2 框架中实现业务逻辑控制、权限验证、日志记录等功能...

    struts-default中拦截器介绍.pdf

    8. `exception` 拦截器:处理Action执行过程中的异常,将其映射为特定的结果,便于统一错误处理。 9. `fileUpload` 拦截器:处理文件上传请求,解析HTTP请求中的文件域内容,实现文件上传功能。 10. `il8n` 拦截器...

    拦截器的使用示例Interceptor

    通过在控制器方法调用前或后插入自定义代码,拦截器可以实现事务管理、日志记录、权限验证等功能。 2. **创建自定义拦截器**: 创建自定义拦截器通常涉及以下步骤: - 定义一个类,实现特定框架提供的拦截器接口...

    struts2拦截器举例

    在Struts2中,拦截器(Interceptor)是一个至关重要的概念,它增强了MVC框架的功能,使得开发者可以对请求处理进行预处理和后处理,实现如日志记录、权限验证、事务管理等通用操作。下面我们将深入探讨Struts2拦截器...

    拦截器、过滤器、参数读取坑记录

    在Spring MVC中,我们可以通过实现HandlerInterceptor接口或者继承AbstractHandlerInterceptorAdapter类来创建自定义拦截器。 ### 2. 过滤器 过滤器则遵循Servlet规范,适用于任何基于Servlet容器的Web应用,不...

    structs2..拦截器实例2-权限验证拦截器

    Struts2是一个强大的MVC框架,它允许开发者通过拦截器来增强应用的功能,比如日志记录、事务管理、权限验证等。本实例主要关注的是“权限验证拦截器”,这是一个用于确保用户具有访问特定资源所需权限的关键组件。 ...

    毕业设计 - SMPE-ADMIN后台管理系统

    - 前后端统一异常拦截处理,统一输出异常,避免繁琐的判断 - 自定义扩展Mybatis-Plus的功能 - 高效率开发,代码生成器可一键生成前后端代码 - 完善的日志记录体系简单注解即可实现 系统功能 - 用户管理:提供用户的...

    Struts2的拦截器的使用详解

    通过定义一系列拦截器并设置它们的执行顺序,你可以实现如日志记录、权限验证、性能监控等通用功能,而无需在每个Action中重复编写这些代码。 二、拦截器的结构与工作原理 1. 拦截器栈:Struts2中的拦截器不是单独...

    文件拦截器

    3. 对异常处理进行统一,确保拦截器的健壮性。 通过理解并正确使用文件拦截器,开发者可以在保证系统安全的同时,提升文件操作的灵活性和效率。在Structs2这样的框架中,拦截器是实现这一目标的强大工具。

    java自定义拦截器用法实例

    Java自定义拦截器是Java开发中一种常见的设计模式,它主要用于在执行某个操作或方法之前进行额外的处理,如权限检查、日志记录等。在Java Web应用中,特别是使用Struts2框架时,拦截器扮演着至关重要的角色。下面...

    SpringBoot拦截器

    在Spring Boot框架中,拦截器(Interceptor)是一个重要的组件,它允许我们在处理请求之前或之后执行自定义逻辑。Spring Boot基于Spring MVC,因此其拦截器机制与Spring MVC中的拦截器类似。下面我们将深入探讨...

    JavaWeb中Struts2拦截器深入分析(一)

    Struts2 拦截器是JavaWeb开发中Struts2框架的核心组件之一,它基于AOP(面向切面编程)理念,允许开发者在Action方法执行前后插入自定义逻辑。拦截器与Servlet中的过滤器虽然在功能上有相似之处,但它们在设计和使用...

    springboot拦截器

    SpringBoot 拦截器是 SpringBoot 应用中一种重要的功能组件,它允许开发者在请求处理前后执行自定义逻辑,比如权限校验、日志记录、性能监控等。SpringBoot 拦截器基于Spring MVC框架中的HandlerInterceptor接口实现...

    08.CXF拦截器的理论以及如何为CXF的客户端和服务器端添加拦截器

    拦截器是CXF框架中的一个重要组成部分,允许开发者在服务调用的生命周期中插入自定义逻辑,实现如日志记录、安全检查、性能监控等功能。本篇将深入探讨CXF拦截器的理论基础,并演示如何为CXF的客户端和服务端添加...

Global site tag (gtag.js) - Google Analytics