Spring @ExceptionHandler 不适用于 @ResponseBody

2023-12-28

我尝试为rest 控制器配置一个spring 异常处理程序,该控制器能够根据传入的accept 标头将映射渲染到xml 和json。它现在抛出 500 servlet 异常。

这有效,它获取了 home.jsp:

@ExceptionHandler(IllegalArgumentException.class)
public String handleException(final Exception e, final HttpServletRequest request, Writer writer)
{
    return "home";
}

这不起作用:

@ExceptionHandler(IllegalArgumentException.class)
public @ResponseBody Map<String, Object> handleException(final Exception e, final HttpServletRequest request, Writer writer)
{
    final Map<String, Object> map = new HashMap<String, Object>();
    map.put("errorCode", 1234);
    map.put("errorMessage", "Some error message");
    return map;
}

在同一个控制器中,通过相应的转换器将响应映射到 xml 或 json:

@RequestMapping(method = RequestMethod.GET, value = "/book/{id}", headers = "Accept=application/json,application/xml")
public @ResponseBody
Book getBook(@PathVariable final String id)
{
    logger.warn("id=" + id);
    return new Book("12345", new Date(), "Sven Haiges");
}

你的方法

@ExceptionHandler(IllegalArgumentException.class)
public @ResponseBody Map<String, Object> handleException(final Exception e, final HttpServletRequest request, Writer writer)

不起作用,因为它的返回类型错误。 @ExceptionHandler 方法只有两种有效的返回类型:

  • String
  • 模型和视图。

See http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html了解更多信息。以下是链接中的具体文本:

返回类型可以是 String,即 被解释为视图名称或 模型和视图对象。

回应评论

谢谢,看来我读过了。那是 不好...任何想法如何提供 xml/json 中自动异常 格式? – 斯文·海格斯 7 小时前

这就是我所做的(我实际上是在 Scala 中完成的,所以我不确定语法是否完全正确,但你应该明白要点)。

@ExceptionHandler(Throwable.class)
@ResponseBody
public void handleException(final Exception e, final HttpServletRequest request,
        Writer writer)
{
    writer.write(String.format(
            "{\"error\":{\"java.class\":\"%s\", \"message\":\"%s\"}}",
            e.getClass(), e.getMessage()));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring @ExceptionHandler 不适用于 @ResponseBody 的相关文章

  • 什么时候在 Spring MVC 之上使用 Spring WebFlow 才有意义?

    Spring MVC 已成为构建企业 Web 应用程序的非常流行的框架 任何复杂的 Web 应用程序都有某些需要编码的流程 包括一些条件流程 即 如果信用卡信息正确 则显示已处理的订单 如果输入不正确 则显示验证错误 什么时候在 Sprin
  • Laravel 中的 PATCH Ajax 请求

    是否可以向 Laravel 发出 Ajax PATCH 请求 或者我是否仅限于 POST Laravel 在输入隐藏字段中使用 PATCH 但是 我没有使用表单元素 只是在单击时 通过 Ajax 请求 应该部分更新记录的按钮 这条路线会是什
  • Spring AOP 和后期构造

    我想写下与 PostConstruct一起使用的方法的名称 但我发现AOP无法 绕过 PostConstruct方法 有没有办法将 AOP 与 PostConstruct 方法一起使用 尝试一下 Around annotation java
  • iPhone RESTful Web 服务

    然而 甚至不确定标题是否正确 我想做的是使用标准 NSURLConnection 类来处理调用我的 web 服务的响应 我使用 POST 方法更新数据库 使用 GET 方法从数据库检索行 我遇到的问题是这两个操作可能同时发生 因此处理请求的
  • 是否可以将路径变量和请求参数绑定到单个对象中? [复制]

    这个问题在这里已经有答案了 我正在创建一个带有路径变量和请求参数的端点 如何将路径变量和请求参数组合到一个对象中 我正在使用 springboot 2 和 java 8 RequestMapping path schedules publi
  • 找不到可接受的代表

    我是 Spring Boot 的新手 我可能会犯一些愚蠢的错误 所以提前对此类问题表示歉意 我正在尝试编写接受以下 JSON 的 POST API id null a 1 3 b somestring mapJson monday 10 0
  • 为移动应用程序创建 API - 身份验证和授权

    Overview 我正在寻找为我的应用程序创建一个 REST API 最初 主要目的是供移动应用程序 iPhone Android Symbian 等 使用 我一直在研究基于 Web 的 API 的身份验证和授权的不同机制 通过研究其他实现
  • Spring boot - 控制器捕获所有 URL

    我正在构建一个 Spring boot Web 应用程序 并使用注释进行控制器 url 映射 我有几个带有注释的控制器 RequestMapping设置了 url 值 空字符串和特定 URL 这些值工作正常 例如 Controller Re
  • 在 Hyperledger Composer REST API 上使用 Passport-http

    我想知道是否可以使用passport http来保护由composer rest server生成的Hyperledger Composer的REST API 以及什么是导出 COMPOSER PROVIDERS 配置 这个想法是使用先前生
  • 是否应该在 REST API PUT 请求中传递资源及其相关资源的所有字段?

    假设我有一个票证和评论资源 门票可以有很多评论 在您的更新端点中HTTP PUT api tickets
  • Azure API Manager 将所有内容公开,摆脱 Ocp-Apim-Subscription-Key

    我有一些通过 Azure API 管理代理的 REST API 出于某种原因 我希望将其公开以应对所有请求 从开发人员的角度来看 我想摆脱在标头 或请求 中设置密钥 Ocp Apim Subscription Key XXXXXXXXXXX
  • 如何触发应用程序通过 REST 服务获取数据?

    我正在寻找一种方法来触发应用程序从远程 REST 服务获取数据 该方法不需要轮询 iOS 推送通知似乎不是一个选项 因为它可以被用户停用 然而 我可能是错的 是否有最佳实践来完成此任务 实际上 推送通知是可行的方法 在 ios8 及更高版本
  • JPA @Entity 内的 Bean 注入

    是否可以将bean注入到JPA中 Entity使用Spring的依赖注入 我尝试 Autowire ServletContext 但是 虽然服务器确实启动成功 但在尝试访问 bean 属性时收到 NullPointerException A
  • Spring-MVC 控制器重定向到“上一页”?

    假设我有一个用于编辑 Pony 属性的表单 并且在我的 Web 应用程序中有多个位置可以选择编辑 Pony 例如 在小马列表中 每个小马旁边可能有一个 编辑 链接 并且当用户查看小马时 该视图中也可能有一个 编辑 链接 当用户在编辑小马后单
  • 如何在 Codeigniter 中我自己的控制器中生成 API 密钥

    只是想提一下 我确实是 API 开发 概念 结构 最佳实践 方面的新手 我对它一点也不熟悉 所以如果您发现我正在使用 Phil 请原谅我可悲的愚蠢问题Sturgeon 的 REST API 服务器 Curl 库和 REST API 客户端这
  • 外部依赖错误的 HTTP 状态代码

    当服务器与外部 API 通信出现问题时 返回的正确 HTTP 状态代码是什么 假设客户端向我的服务器 A 发送有效请求 然后 A 查询服务器 B 的 API 以便执行某些操作 然而 B 的 API 当前抛出 500 错误或因某种原因无法访问
  • Django REST Framework:无法使用视图名称解析超链接关系的 URL

    我已经广泛研究了这个相当常见的问题 但没有一个修复对我有用 我正在 REST 框架中构建 Django 项目 并希望使用超链接关系 用户可以拥有许多独立的汽车和路线 路线是位置的集合 这些是我的序列化器 class CarSerialize
  • 如何从 Android 调用 RESTful 方法?

    我尝试了两种不同的方法来从 Android 调用简单的 REST 方法 所述 REST 方法 适用于其他客户端 仅返回一个 int val 例如 17 以下两次尝试都是基于我在网上找到的代码 有一种是这样的 公共无效onFetchBtnCl
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • 将不同类型的参数传递给 jdbctemplate 查询

    我正在尝试使用带有少量不同类型参数的 where 子句从数据库中检索记录 这是我编写的简单方法 我将breedId和性别作为参数传递 public List

随机推荐