最可靠方式是依据accept请求头动态返回json或html:含application/json时返responseentity,含text/html或为空时返modelandview;辅以@responsebody注解识别和url路径前缀判断,统一errorresponse模型确保前后端兼容。

核心思路是通过请求特征判断类型,再按需返回 JSON 或 HTML 响应。Spring Boot 中最可靠、常用的方式是结合 请求头 Accept 字段 和 控制器返回类型约定,辅以 URL 后缀或内容协商机制。
看 Accept 请求头决定响应格式
浏览器发起页面请求时,Accept 头通常包含 text/html;而前端 AJAX 或移动端调用 API 时,多为 application/json。全局异常处理器可据此动态选择返回方式:
- 若
request.getHeader("Accept")包含"application/json"→ 返回ResponseEntity<errorresponse></errorresponse> - 若包含
"text/html"或为空 → 返回ModelAndView跳转到统一错误页(如/error/500) - 建议用
MediaType.parseMediaType()安全解析,避免字符串硬匹配出错
按 Controller 方法的 @ResponseBody 注解隐式识别
Spring 会根据方法是否标注 @ResponseBody(或类是否为 @RestController)自动设置响应类型。全局异常处理器可通过 HandlerMethod 获取该信息:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在
@ExceptionHandler方法参数中添加HandlerMethod handlerMethod - 调用
handlerMethod.hasMethodAnnotation(ResponseBody.class) - 返回
ResponseEntity表示 API 异常,返回ModelAndView表示页面异常
用 URL 后缀辅助判断(简单直接,适合早期项目)
对明确区分路径的场景(如 /api/user vs /user/profile),可在异常处理器中检查请求路径前缀或后缀:
- 路径以
/api/、/v1/、.json开头或结尾 → 视为 API 请求 - 路径含
/admin/、/login或无后缀 → 视为页面请求 - 注意:该方式耦合 URL 设计,不推荐作为唯一依据,宜与 Accept 头组合使用
统一响应结构 + 页面友好 fallback
无论哪种判断方式,都建议保持异常数据模型一致,便于前端处理:
- 定义通用
ErrorResponse类,含code、message、timestamp - JSON 响应直接序列化该对象,状态码设为对应 HTTP 错误码(如 400/500)
- HTML 响应将
ErrorResponse放入 ModelAndView 的 model,供 Thymeleaf 或 JSP 渲染 - 页面模板中可同时展示错误码和提示,并提供返回首页或重试按钮
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










