当前位置: 首页 > wzjs >正文

公司网站开发比选湖南郴州市区号

公司网站开发比选,湖南郴州市区号,自适应网站怎么做m站,上海网站建设改版引言 在 Web 开发中,异常处理是保障系统健壮性和用户体验的关键环节。Spring MVC 提供了多种异常处理机制,其中 HandlerExceptionResolver 是一个强大且灵活的底层工具。本文将深入探讨它的工作原理、使用场景、实战技巧,并通过具体代码示例…

引言

在 Web 开发中,异常处理是保障系统健壮性和用户体验的关键环节。Spring MVC 提供了多种异常处理机制,其中 HandlerExceptionResolver 是一个强大且灵活的底层工具。本文将深入探讨它的工作原理、使用场景、实战技巧,并通过具体代码示例展示如何全局统一处理异常。

什么是 HandlerExceptionResolver

HandlerExceptionResolver 是 Spring MVC 中用于统一处理控制器方法执行过程中抛出异常的接口。它允许开发者将异常转换为特定的 HTTP 响应,例如:

  • 跳转到自定义错误页面(HTML)

  • 返回结构化的错误 JSON(API 接口)

  • 设置 HTTP 状态码(如 404、500)

通过实现该接口,可以集中管理所有异常,避免在每个控制器中重复编写 try-catch 代码。

 核心方法与处理流程:

ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex
);
  • 参数

    • requestresponse:操作 HTTP 请求和响应。

    • handler:触发异常的控制器方法。

    • ex:抛出的异常对象。

  • 返回值

    • ModelAndView:封装视图和数据,若返回 null 则表示未处理异常,由其他解析器继续处理。

处理流程

  1. 控制器方法抛出异常。

  2. Spring MVC 遍历所有注册的 HandlerExceptionResolver

  3. 第一个能处理该异常的解析器(返回非 null)终止流程。

  4. 若所有解析器均未处理,则交由容器默认处理(如 Tomcat 的 Whitelabel 错误页)

自定义 HandlerExceptionResolver 实战

场景需求

假设项目中需实现以下异常处理逻辑:

  1. Web 请求:跳转到美观的错误页面,并显示友好提示。

  2. API 请求:返回 JSON 格式的错误信息,包含错误码和消息。

  3. 特定异常:如 BusinessException 需记录日志并返回自定义 HTTP 状态码。

代码实现

1. 创建自定义解析器

public class GlobalExceptionResolver implements HandlerExceptionResolver, Ordered {@Overridepublic ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex) {// 判断请求类型:API 或 Webboolean isApiRequest = request.getRequestURI().startsWith("/api/") || "application/json".equals(request.getHeader("Accept"));if (isApiRequest) {return handleApiException(response, ex);} else {return handleWebException(ex);}}private ModelAndView handleApiException(HttpServletResponse response, Exception ex) {try {response.setContentType("application/json");response.setStatus(500); // 默认状态码// 构建 JSON 响应体Map<String, Object> error = new HashMap<>();error.put("code", 500);error.put("message", "服务异常,请稍后重试");// 针对特定异常细化处理if (ex instanceof BusinessException) {BusinessException bex = (BusinessException) ex;error.put("code", bex.getCode());error.put("message", bex.getMessage());response.setStatus(bex.getHttpStatus().value());}// 写入响应流response.getWriter().write(new ObjectMapper().writeValueAsString(error));} catch (IOException e) {e.printStackTrace();}return new ModelAndView(); // 返回空表示已处理}private ModelAndView handleWebException(Exception ex) {ModelAndView mav = new ModelAndView("error-page"); // 模板路径mav.addObject("errorMsg", ex.getMessage());// 记录日志log.error("Web请求异常: ", ex);return mav;}@Overridepublic int getOrder() {return Ordered.HIGHEST_PRECEDENCE; // 最高优先级}
}

2. 注册解析器

@Configuration
public class WebMvcConfig {@Beanpublic HandlerExceptionResolver globalExceptionResolver() {return new GlobalExceptionResolver();}
}

 

3. HTML 错误页模板(Thymeleaf)

resources/templates/error-page.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>错误提示</title>
</head>
<body><h1>抱歉,系统开小差了!</h1><p th:text="${errorMsg}"></p><a href="/">返回首页</a>
</body>
</html>

高级技巧与最佳实践 

1. 优先级控制

通过实现 Ordered 接口或使用 @Order 注解,确保自定义解析器优先于 Spring 默认解析器执行。例如:

@Override
public int getOrder() {return Ordered.HIGHEST_PRECEDENCE; // 值越小,优先级越高
}

2. 异常日志记录

在解析器中统一记录异常日志,便于问题排查:

@Override
public ModelAndView resolveException(...) {log.error("请求路径: {}, 异常信息: {}", request.getRequestURI(), ex.getMessage(), ex);// ...处理逻辑
}

3. 区分异常类型

针对不同异常定制处理逻辑,提升用户体验:

if (ex instanceof ResourceNotFoundException) {response.setStatus(404);error.put("message", "请求的资源不存在");
} else if (ex instanceof AccessDeniedException) {response.setStatus(403);error.put("message", "无权访问");
}

 

与 @ControllerAdvice 对比:

特性HandlerExceptionResolver@ControllerAdvice + @ExceptionHandler
灵活性更底层,可完全控制处理流程基于注解,较为简洁
适用场景需要动态判断响应类型(如 HTML/JSON)同一异常类型固定返回一种响应格式
代码侵入性需手动注册解析器无侵入,通过注解声明
优先级控制通过 Ordered 接口精细控制默认按 @Order 注解或 Bean 顺序

总结

HandlerExceptionResolver 是 Spring MVC 异常处理的底层核心机制,适合需要高度定制异常响应的场景。通过本文的实例,你可以快速掌握:

  • 如何区分 Web 和 API 请求返回不同格式的错误信息

  • 如何结合日志记录、异常分类提升系统可维护性

  • 灵活控制处理优先级和响应细节

尽管现代 Spring 项目中更推荐使用 @ControllerAdvice(代码更简洁),但在需要动态处理逻辑(如多端适配、第三方库异常转换)时,HandlerExceptionResolver 仍是不可或缺的利器。

 

 

 


文章转载自:

http://2eIroMKG.wjtxt.cn
http://1pFkvaYH.wjtxt.cn
http://lMlRy9u8.wjtxt.cn
http://rqklkxAb.wjtxt.cn
http://RWg5E8M1.wjtxt.cn
http://3pO9on1y.wjtxt.cn
http://uiyKIqat.wjtxt.cn
http://buOWAain.wjtxt.cn
http://KNyGfafM.wjtxt.cn
http://XZW0WkEU.wjtxt.cn
http://cWTSmqQB.wjtxt.cn
http://Z8iXDa6j.wjtxt.cn
http://ibdlEAIq.wjtxt.cn
http://egA97jBB.wjtxt.cn
http://wY6cJEDY.wjtxt.cn
http://Fu0PEPv8.wjtxt.cn
http://FbiEl6MZ.wjtxt.cn
http://niCyGAFh.wjtxt.cn
http://tCmXDC8I.wjtxt.cn
http://OYrT9TGF.wjtxt.cn
http://FWWRrztl.wjtxt.cn
http://U5deBNyZ.wjtxt.cn
http://3BXsSVaZ.wjtxt.cn
http://ieT9ABs1.wjtxt.cn
http://pKwMPto8.wjtxt.cn
http://pQeGBOE1.wjtxt.cn
http://FfZ3ooey.wjtxt.cn
http://mzehL3Mb.wjtxt.cn
http://e2z7Ub1A.wjtxt.cn
http://GWsLuCwM.wjtxt.cn
http://www.dtcms.com/wzjs/693669.html

相关文章:

  • 西安网站架设公司网站建设的培训的感受
  • 广州网站建设开发电子商务网站安全性能主要包括
  • htm5网站建设html网页设计代码购物网站
  • 怎么知道网站被百度k了公司网站建设需要哪些方面
  • 中国建设企业协会网站赣州做网站多少钱
  • 怎么样进行网站建设微信答题小程序制作
  • 网站建设排行网站视频主持人网
  • 企业建站公司实力对比手机网站Com
  • 试描述一下网站建设的基本流程建网站做淘宝客
  • 手机手机端网站建设别人做网站要把什么要过来
  • 深圳做网站推广公司网站开发网站开发设计
  • 做电商自建网站怎样开发网站需要多少人
  • 关于手机的网站有哪些内容吗湛江市微信网站建设企业
  • 长沙网站建设推广服务在一呼百应上做网站行吗
  • 教育类网站建设策划书中国新闻社广东分社
  • 县级林业网站建设管理黑马程序员学费
  • 网站做的简单是什么意思用ps怎么做网站步骤
  • 计算机网站建设实训总结郑州广告制作公司
  • 国外虚拟物品交易网站网站制作公司哪家好
  • 网站备案率是什么招聘网站如何建设
  • 宁波网站推广公司价格无锡市政设施建设工程有限公司
  • 网站如何建立夜蝶直播app下载安装
  • 柳市网站设计推广狠狠做狠狠干免费网站
  • 用wordpress做的网站有哪些制作网站用c 做前台
  • 开发直播平台网站有关企业电子网站建设论文
  • 有谁可以做网站寄生虫在那个网站做任务赚
  • 中文手机网站设计案例seo查询优化
  • 企业展示型网站怎么建wordpress 有赞收款
  • 搜索引擎禁止的方式优化网站网站建设费用应该开专票还是普票
  • iis 手机网站竞价推广外包