当前位置: 首页 > 知识库问答 >
问题:

@在自定义ResponseEntityExceptionHandler中未为Spring异常调用类型异常的ExceptionHandler

公良玺
2023-03-14

在阅读了一些关于为Spring创建自定义异常处理程序的博客文章后,我编写了以下类:

@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ResponseEntity<Object> exceptionHandler(Exception e) {
        HashMap<String, Object> msg = new HashMap<>(2);
        msg.put("error", HttpStatus.PRECONDITION_FAILED.value());
        msg.put("message", "Something went wrong");
        return new ResponseEntity<>(msg, HttpStatus.BAD_REQUEST);
    }
}

其目的是在JSON响应中发送msg,而不是放弃由于任何原因引发的Spring异常。

然而,这门课不起作用。

例如,当我命中服务器API的无效终结点时,我将获得默认的响应有效载荷:

{
  "timestamp": 1449238700342,
  "status": 405,
  "error": "Method Not Allowed",
  "exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
  "message": "Request method 'POST' not supported",
  "path": "/bad_enpoint"
}

我错过了什么?

谢谢。

共有2个答案

柴正祥
2023-03-14
  1. 无需扩展ResponseEntityExceptionHandler即可使其工作
  2. 设置两个httpstatus真是个糟糕的主意
    @ControllerAdvice
    public class RestExceptionHandler  {
        @ExceptionHandler(value = Exception.class)
        @ResponseBody
        public ResponseEntity<String> exceptionHandler(Exception e) {
            return new ResponseEntity<>("Something went wrong", HttpStatus.BAD_REQUEST);
        }
    }
齐昊焱
2023-03-14

不会调用您的处理程序,因为您希望将异常映射到自定义错误响应,但Spring MVC很可能已经为异常类注册了一个异常处理程序。它还有一个可以处理HttpRequestMethodNotSupportedException

无论如何,覆盖整个SpringMVC异常处理/映射不是一个好主意。您应该只关心特定的异常——您定义的异常。

请阅读本文,了解SpringMVC异常处理的更多细节。

 类似资料:
  • 我是Spring的新手。我正在使用SpringWebMVC开发RESTAPI。对于错误处理,我得到了这个链接http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann rest spring mvc异常 我曾尝试在我的项目中使用ResponseEntityExceptionHand

  • 我用Spring5反应式编写了一个自定义异常 我把这个叫做服务: 但是当我到达这个页面时,会抛出一个异常,但它不是404,而是一个空指针异常和一个错误500页面,但有正确的消息? AddressNotFound永远不会抛出,只有Nullpointer异常,但会抛出我的自定义消息???你能帮帮我吗? 这是我的控制器: 谢谢

  • 我使用的是SpringBoot2.3。我遇到了一些例外情况。我想使用类在全局级别捕获异常。我能够捕获验证错误并返回自定义错误响应,但Spring似乎忽略了我的方法。这是我的课程: andler.java 下面是我抛出异常的方法: PhotoStorageServiceImp.java PhotoUploadController.java } 我在检索照片时遇到错误

  • 我有这个方法来处理所有缺少请求头的异常,但在一个控制器中,希望接收一个json作为主体。如果它是无效的json或为null,则会使用自定义消息删除异常: {“消息”:“错误请求”,“详细信息”:[“必需的请求正文丢失:public org.springframework.http.responseentity packages.fazerlogin(packages.bodylogin)throw

  • 问题内容: 我们正在使用Spring MVC + Spring Security + Hibernate创建一个RESTful API。该API可以生成JSON和HTML。做好弹簧安全性的错误处理让我头疼: 身份验证可以通过多种方式进行:BasicAuth,通过POST请求中的不同参数以及通过Web登录。对于每种身份验证机制,在Spring Security xml配置的名称空间元素中声明了一个过

  • 如果 Java 提供的内置异常类型不能满足程序设计的需求,这时我们可以自己设计 Java 类库或框架,其中包括异常类型。实现自定义异常类需要继承 Exception 类或其子类,如果自定义运行时异常类需继承 RuntimeException 类或其子类。 自定义异常的语法形式为: 在编码规范上,一般将自定义异常类的类名命名为 XXXException,其中 XXX 用来代表该异常的作用。 自定义异