一、使用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。
相关推荐
SpringMVC还提供了丰富的特性,如视图解析、数据绑定、异常处理等。 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。它...
在IT行业中,Spring、SpringMVC和Mybatis是三大非常重要的Java开发框架,它们的组合应用广泛用于构建企业级Web应用程序。...在实际开发中,还需要考虑异常处理、安全控制、性能优化等方面,以构建更完善的企业级应用。
SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求-响应模式。它将模型、视图、控制器分离,使得代码结构清晰,易于维护。开发者可以自定义拦截器、异常处理器等,增强应用的灵活性和可扩展性。 ...
Spring MVC 4 提供了诸如路径映射、数据绑定、异常处理等特性,并且能够很好地与Spring其他模块集成。 **MyBatis 3** 是一个持久层框架,它简化了Java应用中的SQL操作。MyBatis通过XML或注解的方式将SQL语句与Java...
Spring MVC 还支持模型绑定、数据验证、本地化和异常处理,使得 Web 开发更加高效和规范。 3. **Mybatis**:Mybatis 是一个持久层框架,它简化了 SQL 查询与Java对象之间的映射工作。通过 XML 或注解配置,Mybatis ...
在实际开发过程中,开发者还需要考虑如何进行单元测试、异常处理、日志记录等,以确保项目的健壮性和可维护性。此外,随着微服务架构的流行,SSM框架也经常作为微服务中的一个服务组件,与其他微服务进行交互。 总...
标题中的“spring+springmvc+mybatis整合jar包”指的是一个包含了Spring框架、Spring MVC以及MyBatis这三大核心组件的集成解决方案。这样的整合包在Java Web开发中极为常见,它简化了项目的初始化配置,使得开发者...
在实际开发中,我们还需要考虑异常处理、权限控制、数据安全、性能优化等方面,确保系统的稳定性和用户体验。例如,使用Spring Security进行权限管理,使用缓存技术如Redis提高数据访问速度,使用Log4j记录日志以便...
在实际开发中,开发者还需要考虑安全性、性能优化、异常处理、国际化等方面的问题。例如,可以使用Spring Security进行权限控制,使用缓存提高数据访问效率,通过日志记录系统运行情况,以及通过i18n支持多语言环境...
Spring MVC支持模型绑定、数据验证、异常处理等功能,能够轻松实现RESTful服务。 4. **Maven**:Maven是一个项目管理和综合工具,主要用于构建、依赖管理和文档生成。通过Maven,开发者可以定义项目的构建过程,...
5. **异常处理**:讲解如何定义全局异常处理器,以及Spring MVC中异常的层次结构。 通过深入理解和掌握这些知识点,开发者不仅能在面试中表现出色,也能在实际工作中更好地应用和优化这些框架,提高开发效率和代码...
项目描述 说明: spring security 全注解式的权限管理 动态配置权限,角色和资源,权限控制到...Springboot+Mybatis+ SpringMvc+springsecrity+Redis+bootstrap+jquery 数据库文件 压缩包内 jar包文件 maven搭建
它提供了一个模型-视图-控制器(MVC)架构,用于处理HTTP请求和响应,支持请求映射、数据绑定、异常处理等功能,使得Web应用的开发更加简洁和高效。 4. **spring-web-4.3.13.RELEASE.jar**:这个模块提供了与Web...
SpringMVC是Spring框架的一个模块,专门用于处理Web请求。它通过模型-视图-控制器(MVC)模式,将业务逻辑、数据展示和用户交互分离,提高了系统的可扩展性和可维护性。在本系统中,SpringMVC接收HTTP请求,调用相应...
使用了springmvc统一异常处理 使用了FormattingConversionServiceFactoryBean对于传入参数中日期或数字字符串进行数据转换和数据格式化 使用了SpringContextHolder方便在自定义线程中调用spring已经实例的bean,如...
SSM框架,即Spring、SpringMVC和MyBatis的集成,是Java开发Web应用时常用的三大组件。本文将深入探讨如何详细搭建一个基于...在实际开发中,还需要考虑异常处理、日志记录、安全性等多方面因素,以构建健壮的应用系统。
SSM框架是Java Web开发中常用的一种整合框架,由Spring、SpringMVC和Mybatis三个开源项目组成。这三个组件协同工作,为开发者提供了强大的数据访问和业务逻辑处理能力。 1. **Spring框架**:Spring是Java企业级应用...
例如,可以引入Spring Security进行权限管理,使用Log4j或Logback进行日志记录,添加Spring AOP实现全局异常处理等。 这个SSM框架整合例子中,可能包含了各个组件的配置文件、示例Controller、Service、Mapper以及...
以上只是基础的整合步骤,实际项目中还需要考虑异常处理、安全性、国际化、日志等多方面的问题。学习并掌握这三大框架的整合,有助于提升Java Web开发能力,为构建高质量的应用奠定坚实的基础。在实践过程中,不断...