2016-11-04 3 views
1

Когда я кидает исключение throw new ForbiddenAjaxException() внутри @ExceptionHandlerThrow исключение внутри @ExceptionHandler

@ExceptionHandler({ ForbiddenException.class }) 
    public String forbiddenException(HttpServletRequest request, HttpServletResponse response) { 

     if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){ 
      throw new ForbiddenAjaxException(); 
     } 

     return "redirect:/projects/error"; 
    } 

Она не ответила с ошибкой @ResponseStatus(HttpStatus.FORBIDDEN)

@ResponseStatus(HttpStatus.FORBIDDEN) 
public class ForbiddenAjaxException extends RuntimeException {} 

Войдите:

11:00:06.277 [http-nio-8080-exec-8] ERROR org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - Failed to invoke @ExceptionHandler method: public java.lang.String controller.projects.ExceptionHandling.forbiddenException(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 
exceptions.ForbiddenAjaxException 
    at controller.projects.ExceptionHandling.forbiddenException(ExceptionHandling.java:33) ~[classes/:?] 

PS: Когда ForbiddenException (обычные запросы не ajax) бросается t, пойманный обработчиком исключений.

+0

, что произойдет, если вы бросаете 'ForbiddenAjaxException' непосредственно от контроллера? – Ralph

+0

Выглядит как дубликат: http://stackoverflow.com/questions/23077573/how-to-rethrow-exception-as-responsestatus-annotated-exception-in-spring-excep – Ralph

+0

@Ralph это работает, если я бросаю ForbiddenAjaxException непосредственно с контроллера – Youssef

ответ

0

Вы можете использовать следующие

@ExceptionHandler({ ForbiddenException.class }) 
    public Object forbiddenException(HttpServletRequest request, HttpServletResponse response) { 

     if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){ 
      return new ResponseEntity(HttpStatus.FORBIDDEN); 
     } 

     return "redirect:/projects/error"; 
    } 
Смежные вопросы