0

通过spring框架的文档了解了spring应用的自定义异常处理机制。根据文档,据说spring提供了一些默认的异常解析器。

SimpleMappingExceptionResolver

异常类名称和错误视图名称之间的映射。对于在浏览器应用程序中呈现错误页面很有用。

DefaultHandlerExceptionResolver

解决 Spring MVC 引发的异常并将它们映射到 HTTP 状态代码。另请参阅替代 ResponseEntityExceptionHandler 和 REST API 异常。

ResponseStatusExceptionResolver

使用 @ResponseStatus 注释解决异常,并根据注释中的值将它们映射到 HTTP 状态代码。

异常处理程序异常解析器

通过在@Controller 或@ControllerAdvice 类中调用@ExceptionHandler 方法来解决异常。请参阅@ExceptionHandler 方法。

但在我的要求中,我不想要所有这些解析器的支持,我只想让 ExceptionHandlerExceptionResolver 处理我的 Spring 应用程序中的异常。因此,我在 DispatcherServlet 中添加了以下配置。

DispatcherServlet相关配置。

       public void onStartup(ServletContext servletCxt) throws   {                   ServletException {
             ......
    dServlet.setDetectAllHandlerExceptionResolvers(false);
    dServlet.setThrowExceptionIfNoHandlerFound(false);
             .....
  }

在我的 Bean 配置 java 类中,我创建了以下 bean。

      @Bean(name=DispatcherServlet.HANDLER_EXCEPTION_RESOLVER_BEAN_NAME)
         HandlerExceptionResolver customExceptionResolver ( ) {
    return new ExceptionHandlerExceptionResolver();
}

在文档中,指出

/** * 设置是否检测此 servlet 上下文中的所有 HandlerExceptionResolver bean。否则,* 只需要一个名为“handlerExceptionResolver”的 bean。*

默认为“真”。如果您希望此 servlet 使用单个 * HandlerExceptionResolver,请将其关闭,尽管在上下文中定义了多个 HandlerExceptionResolver bean。*/

但即使在所有这些配置之后,我看到 HTML 错误页面而不是 JSON 错误响应。

示例 ExceptionHandler 方法。

       @ExceptionHandler(value={NullPointerException.class})
                public ResponseEntity<Object> nullPointerExceptionHandler(NullPointerException e){
        logger.info("local exception resolver running");
        Map<String,Object> map=new HashMap<String,Object>(6);
        map.put("isSuccess",false);
        map.put("data",null);
        map.put("status",HttpStatus.INTERNAL_SERVER_ERROR);
        map.put("message", e.getMessage());
        map.put("timestamp",new Date());
        map.put("fielderror",null);
        return new ResponseEntity<Object>(map,HttpStatus.BAD_GATEWAY);
    }

我做错了什么?我只需要在整个 Spring 应用程序中支持 ExceptionHandlerExceptionResolver 即可保持一致性。

4

0 回答 0