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

用于restful和普通的Spring MVC ExceptionHandler

茅华灿
2023-03-14
@ControllerAdvice
public class MyExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ModelAndView handleCustomException(Exception ex) {

        ModelAndView model = new ModelAndView("error");
        model.addObject("errMsg", ex.getMessage());
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        ex.printStackTrace(pw);
        sw.toString();
        model.addObject("errTrace", sw);
        return model;

    }

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public String handleAjaxException(Exception ex) {
        JSONObject model = new JSONObject();
        model.put("status", "error");
        model.put("errMsg", ex.getMessage());
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        ex.printStackTrace(pw);
        sw.toString();
        model.put("errTrace", sw);

        return model.toString();
    }
}

这将给我一个错误,因为我不能使用@exceptionHandler(exception.class)两次。那么有什么解决办法呢?

共有1个答案

饶承宣
2023-03-14

请参见@controlleradvice的配置:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/controlleradvice.html

因此,您可以创建两个类(错误处理程序),并指定Annotations/basepackages/assignibaletypes

例如,对于REST(ajax),对控制器使用@RESTController注释,可以处理如下错误:

@ControllerAdvice(annotations = RestController.class)
public class MyExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public String handleAjaxException(Exception ex) {
        ...
    }
}
@ControllerAdvice(annotations = Controller.class)
 类似资料:
  • 问题内容: 我必须在这里丢失一些内容,但是以下代码返回一个空字符串: 用JSON对这个数组进行编码的正确方法是什么? 问题答案: JavaScript数组旨在保存带有 数字 索引的数据。您可以向它们添加命名属性,因为数组是一种对象类型(当您要存储有关包含常规,有序,数字索引数据的数组的元数据时,这很有用),但这并不是它们的设计目标对于。 JSON数组数据类型 不能 在数组上具有命名键。 当您将Ja

  • 我有一个可以激活和停用的资源()。 用于此目的的最适合REST的URLendpoint是什么? 现在我在考虑和,但我认为这不是很RESTful。 此外,我不确定使用什么HTTP方法。 你能提供一些指示吗? 谢谢!

  • 大家好,请告诉我如何在普通jersey rest服务或任何没有spring的web应用程序上添加aop。我用这个链接试过了http://ganeshghag.blogspot.in/2012/10/demystifying-aop-getting-started-with.html但它没有起作用。在本例中,我添加了aop。META-INF中的xml。但它仍然没有检测到我用@Aspect注释添加的类

  • 我正在使用Spotify API,并希望使用RXJava链接一些分页结果。Spotify使用基于光标的分页,因此@lopar中的解决方案将不起作用。 和 我希望返回中的所有艺术家(在本例中为119)。我是RxJava的新手,所以我不确定是否有一个聪明的方法来做到这一点。

  • 重复执行一系列命令:可以指定表示重复次数的数字或直到遇到 break。 Loop [, Count] 参数 Count 执行循环体 (重复) 的次数. 如果省略, Loop 会无期限继续, 直到遇到 break 或 return. 如果 Count 是一个变量引用例如 %ItemCount%, 每当此变量为空或包含小于 1 的数字时, 循环会被完全跳过. 由于必须支持 文件模式循环, Count

  • 问题内容: 具体而言 我只想对特定的网址格式进行HTTP基本身份验证。 详细地 我正在为我的应用程序创建一个API接口,需要通过简单的 HTTP基本身份验证进行身份验证 。但其他网页应 不 使用HTTP基本而是在 正常的形式登录。 当前配置-不起作用 问题答案: 等待了2天,在这里没有任何帮助。但是我的研究为我提供了解决方案:) 解