`

spring+springmvc中的异常处理

 
阅读更多

一、使用HandlerExceptionResolver实现全局异常捕获

 

 

1、封装一个自己的业务异常类

 

 

public final class BizException extends RuntimeException {

	private static final long serialVersionUID = 8342451586322744222L;
	/**
	 * 业务异常码
	 */
	private Code codes;
	/**
	 * 异常信息
	 */
	private String bizMsg;

	/**
	 * 私有构造函数
	 *
	 * @param codes
	 * @param bizMessage
	 */
	private BizException(Code codes, String bizMessage) {

		super(codes.getMessage() + ":" + bizMessage);
		this.codes = codes;
		this.bizMsg = bizMessage;
	}

	/**
	 * 静态工厂方法
	 *
	 * @return
	 */
	public static BizException create(Code code) {
		return new BizException(code, null);
	}

	public static BizException create(Code code, String msg) {
		return new BizException(code, msg);
	}

	public Code getCodes() {
		return codes;
	}

	public void setCodes(Code codes) {
		this.codes = codes;
	}

	public String getBizMsg() {
		return bizMsg;
	}

	public void setBizMsg(String bizMsg) {
		this.bizMsg = bizMsg;
	}
}

 

 

 

2、定义自己的异常处理类MyExceptionHandler需要实现org.springframework.web.servlet.HandlerExceptionResolver接口。

 

public class MyExceptionHandler implements HandlerExceptionResolver {
	private static final Logger LOG = LoggerFactory.getLogger(MyExceptionHandler.class);

	@Override
	public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
			Object o, Exception e) {
		httpServletResponse.setCharacterEncoding("UTF-8");
		httpServletResponse.setHeader("Content-type", "application/json;charset=UTF-8");
		try {
			if (e instanceof BizException) {
				LOG.error("业务异常:" + e.getMessage());
				BizException ex = (BizException) e;
				HttpResponse httpResponse = HttpResponse.create(ex.getCodes(),
						StringUtils.isBlank(ex.getBizMsg()) ? "" : ex.getBizMsg());
				httpServletResponse.getWriter().write(new Gson().toJson(httpResponse));
			} else {
				LOG.error("系统异常:" + e.getMessage());
				e.printStackTrace();
				HttpResponse httpResponse = HttpResponse.create(Code.SystemError, e.getMessage());
				httpServletResponse.getWriter().write(new Gson().toJson(httpResponse));
			}
		} catch (IOException e1) {

		}
		return new ModelAndView();
	}
}

 

 

3、在spring配置文件中定义bean

 

 

<!-- 异常处理类 -->
	<bean name="myExceptionHandler" class="com.platform.common.MyExceptionHandler"/>

 

 

4、在代码中抛出自己的异常在resolveException方法中进行处理。

 

 

if (task == null) {
			throw BizException.create(Code.NoProcess, "未执行通过上一步流程");
		}

 

 

Code为自己定义的错误码枚举

 

二、使用@ControllerAdvice 、@ExceptionHandler两个注解来实现全局的异常捕获

 

 

// @ControllerAdvice
public class DefaultExceptionHandler {

	// @ResponseStatus(HttpStatus.UNAUTHORIZED)
	// @ExceptionHandler({ BizException.class, SizeLimitExceededException.class,
	// MaxUploadSizeExceededException.class })
	// @ResponseBody
	public HttpResponse processUnauthorizedException(NativeWebRequest request, Exception e) {
		if (e instanceof BizException) {
			((BizException) e).getCodes();
		} else if (e instanceof MaxUploadSizeExceededException || e instanceof SizeLimitExceededException) {
			return HttpResponse.create(Code.SizeOver, "文件大小超过了10M");
		}
		return HttpResponse.create(Code.SystemError, e.getMessage());
		// 判断异常类型,返回相应内容
	}

}

 

@ControllerAdvice注解类似@Controller,后面加Advice可以理解为在Controller的方法上加的通知(后置)。在Controller的方法执行后,如果有异常抛出,会被该类的对应方法拦截。@ExceptionHandler注解表示拦截指定的异常,在@ExceptionHandler注解的方法中处理捕获的异常。返回同Controller。

 

 

 

 

分享到:
评论

相关推荐

    spring+springmvc+mybatis完整包

    SpringMVC还提供了丰富的特性,如视图解析、数据绑定、异常处理等。 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。它...

    Spring+SpringMVC+Mybatis框架项目整合

    在IT行业中,Spring、SpringMVC和Mybatis是三大非常重要的Java开发框架,它们的组合应用广泛用于构建企业级Web应用程序。...在实际开发中,还需要考虑异常处理、安全控制、性能优化等方面,以构建更完善的企业级应用。

    spring+springMVC+hibernate

    SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求-响应模式。它将模型、视图、控制器分离,使得代码结构清晰,易于维护。开发者可以自定义拦截器、异常处理器等,增强应用的灵活性和可扩展性。 ...

    mybatis3+spring+springMVC4整合jar包.rar

    Spring MVC 4 提供了诸如路径映射、数据绑定、异常处理等特性,并且能够很好地与Spring其他模块集成。 **MyBatis 3** 是一个持久层框架,它简化了Java应用中的SQL操作。MyBatis通过XML或注解的方式将SQL语句与Java...

    Spring+SpringMVC+Mybatis+easyUI

    Spring MVC 还支持模型绑定、数据验证、本地化和异常处理,使得 Web 开发更加高效和规范。 3. **Mybatis**:Mybatis 是一个持久层框架,它简化了 SQL 查询与Java对象之间的映射工作。通过 XML 或注解配置,Mybatis ...

    基于SSM(Spring+SpringMVC+Mybatis)框架结构的java web应用开发案例

    在实际开发过程中,开发者还需要考虑如何进行单元测试、异常处理、日志记录等,以确保项目的健壮性和可维护性。此外,随着微服务架构的流行,SSM框架也经常作为微服务中的一个服务组件,与其他微服务进行交互。 总...

    spring+springmvc+mybatis整合jar包

    标题中的“spring+springmvc+mybatis整合jar包”指的是一个包含了Spring框架、Spring MVC以及MyBatis这三大核心组件的集成解决方案。这样的整合包在Java Web开发中极为常见,它简化了项目的初始化配置,使得开发者...

    spring+springmvc+mybatis搭建的一个酒店管理系统附带mysql数据库

    在实际开发中,我们还需要考虑异常处理、权限控制、数据安全、性能优化等方面,确保系统的稳定性和用户体验。例如,使用Spring Security进行权限管理,使用缓存技术如Redis提高数据访问速度,使用Log4j记录日志以便...

    管理系统系列--SSM(Spring+SpringMVC+Mybatis)新闻管理系统.zip

    在实际开发中,开发者还需要考虑安全性、性能优化、异常处理、国际化等方面的问题。例如,可以使用Spring Security进行权限控制,使用缓存提高数据访问效率,通过日志记录系统运行情况,以及通过i18n支持多语言环境...

    Spring+Hibernate+SpringMVC+Maven整合

    Spring MVC支持模型绑定、数据验证、异常处理等功能,能够轻松实现RESTful服务。 4. **Maven**:Maven是一个项目管理和综合工具,主要用于构建、依赖管理和文档生成。通过Maven,开发者可以定义项目的构建过程,...

    开源框架面试题系列:Spring+SpringMVC+MyBatis

    5. **异常处理**:讲解如何定义全局异常处理器,以及Spring MVC中异常的层次结构。 通过深入理解和掌握这些知识点,开发者不仅能在面试中表现出色,也能在实际工作中更好地应用和优化这些框架,提高开发效率和代码...

    基于Springboot+Mybatis+ SpringMvc+springsecrity+Redis完整网站后台管理系统

    项目描述 说明: spring security 全注解式的权限管理 动态配置权限,角色和资源,权限控制到...Springboot+Mybatis+ SpringMvc+springsecrity+Redis+bootstrap+jquery 数据库文件 压缩包内 jar包文件 maven搭建

    Spring+SpringMVC JAR包

    它提供了一个模型-视图-控制器(MVC)架构,用于处理HTTP请求和响应,支持请求映射、数据绑定、异常处理等功能,使得Web应用的开发更加简洁和高效。 4. **spring-web-4.3.13.RELEASE.jar**:这个模块提供了与Web...

    spring+springmvc+mybatis OA考勤管理系统带mysql数据库

    SpringMVC是Spring框架的一个模块,专门用于处理Web请求。它通过模型-视图-控制器(MVC)模式,将业务逻辑、数据展示和用户交互分离,提高了系统的可扩展性和可维护性。在本系统中,SpringMVC接收HTTP请求,调用相应...

    SSM框架——项目详细搭建(Spring+SpringMVC+MyBatis + oracle)

    SSM框架,即Spring、SpringMVC和MyBatis的集成,是Java开发Web应用时常用的三大组件。本文将深入探讨如何详细搭建一个基于...在实际开发中,还需要考虑异常处理、日志记录、安全性等多方面因素,以构建健壮的应用系统。

    博客 ssm:Spring+SpringMvc+Mybatis

    SSM框架是Java Web开发中常用的一种整合框架,由Spring、SpringMVC和Mybatis三个开源项目组成。这三个组件协同工作,为开发者提供了强大的数据访问和业务逻辑处理能力。 1. **Spring框架**:Spring是Java企业级应用...

    Spring+SpringMVC+Mybatis框架整合例子(SSM)

    例如,可以引入Spring Security进行权限管理,使用Log4j或Logback进行日志记录,添加Spring AOP实现全局异常处理等。 这个SSM框架整合例子中,可能包含了各个组件的配置文件、示例Controller、Service、Mapper以及...

    spring+springmvc+mybatis项目案例实现用户角色权限管理

    使用了springmvc统一异常处理 使用了FormattingConversionServiceFactoryBean对于传入参数中日期或数字字符串进行数据转换和数据格式化 使用了SpringContextHolder方便在自定义线程中调用spring已经实例的bean,如...

    spring+springmvc+mybatis.rar

    以上只是基础的整合步骤,实际项目中还需要考虑异常处理、安全性、国际化、日志等多方面的问题。学习并掌握这三大框架的整合,有助于提升Java Web开发能力,为构建高质量的应用奠定坚实的基础。在实践过程中,不断...

Global site tag (gtag.js) - Google Analytics