我有一个名为< code > globalcexceptionhandler 的类,它由< code>ControllerAdvice注释。它正确处理所有< code > NoHandlerFoundExceptions 。我向添加了一个新方法来处理< code>InternalError异常,但它不处理此类异常;因此,我仍然收到< code>HTTP状态500。
基于此链接,< code>500(内部服务器错误)的异常类为< code > ConversionNotSupportedException 。
我尝试了以下代码,但没有捕获内部服务器错误。
1
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleExceptionNotFound(NoHandlerFoundException ex) {
System.err.println("not found");
return "redirect:/error";
}
@ExceptionHandler(ConversionNotSupportedException.class)
// @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleExceptionsInternalError(ConversionNotSupportedException ex) {
ex.printStackTrace();
System.err.println("internal error");
return "redirect:/error";
}
}
2.
@ExceptionHandler(ConversionNotSupportedException.class)
public String handleExceptionsInternalError(HttpServletRequest req, ConversionNotSupportedException ex) {
3个
@ExceptionHandler
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleExceptionsInternalError(ConversionNotSupportedException ex) {
我需要处理的异常如下:
HTTP Status 500 - Could not resolve view with name 'user' in servlet with name 'myproject'
javax.servlet.ServletException: Could not resolve view with name 'user' in servlet with name 'myproject'
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1211)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
控制器建议似乎无法处理此类异常。我将以下代码添加到<code>网站中。xml来处理此异常。如果您有更好的解决方案,请告诉我。谢谢
<error-page>
<error-code>500</error-code>
<location>/errorhandler</location>
</error-page>
看起来您的异常处理程序正在返回一个无效的视图,这导致调用异常处理程序的代码中出现异常。请参阅dispatcher servlet . processdispatchresult
在这种情况下,异常是从调度程序Servlet本身引发的,处理它的唯一方法是通过Web.xml
您需要修复异常处理程序以返回有效视图。使用@ExceptionHandler(Exception.class)
处理的其他答案是有效的,可以用于处理从控制器引发的异常。
更新:基于@Jack的评论,异常是由一个控制器返回一个不存在的视图引起的(而不是我原来以为的异常处理程序)。一旦您返回一个视图,容器调用视图解析器来呈现它,如果抛出一个异常,将不会调用异常处理程序(参见
另一个选项是覆盖视图resolver.resolveViewName,假设您正在使用InternalResourceViewResolver,如下所示:
public class CustomViewResolver extends InternalResourceViewResolver {
@Override
public View resolveViewName(String viewName,
Locale locale) throws Exception {
try{
return super.resolveViewName();
} catch (Exception ex) {
//log
return new InternalResourceView("urlForErrorView");
}
}
}
我有一个SpringRest申请。我从controller抛出所有异常,并在一个公共位置处理它们,一个名为ExceptionHandlerControllerAdvision的类,用@ControllerAdvision注释。在这里,我有多个用@ExceptionHandler注释的方法来处理每种类型的异常。在这些方法中,我发送自定义错误json响应。在将此错误json发送给使用者之前,我会在日志
我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?
我正在使用Spring Boot 1.5.9开发我的应用程序。我需要实现jwt身份验证,我使用了jjwt库。以下代码来自我的自定义身份验证安全筛选器,它继承自。在这里,我试图从令牌解析用户名,当自动解析用户名时,jwt会验证用户名,并检查令牌的过期时间。我调试了它,它可以工作,所以接下来我想向客户端应用发送正确的消息,说明身份验证失败的原因。我想抛出一个ExpiredJwtException,并使
我收到了错误消息: 被精确定位的线在这里: 返回类型为
我使用的是改型2.0.1。我想处理所有类型的网络错误和异常(如没有网络连接,超时错误,服务器找不到等)我已经找到这个链接。但是其中一些方法在V1.8.0中被否决了。在2.0.1中如何做到这一点?
我有一个带有REST方法的控制器类,可以抛出各种异常。我已经决定在一个单独的类中处理这些异常,在我的处理程序方法中使用@ControlllerAdwn和@ExceptionHandler。但是,我有一个问题,我的REST方法使用另一个库的注释。此库捕获REST方法引发的异常。现在,我正在全局处理异常,而不是直接通过REST方法中的试/捕获,我的异常总是被其他库捕获,而不是被我自己的处理程序方法捕获