Spring restful @ExceptionHandler具有太高的优先级/顺序

时间:2015-03-20 01:15:43

标签: java spring spring-mvc exception-handling

我在@ExceptionHandler带注释的类中有一个@ControllerAdvice注释方法。

此方法必须捕获所有异常,但之后某些默认处理程序处理了一些异常,而不是第一个处理程序(例如,它不应该处理{{1} ,否则转发到登录页面,由Spring完成,不再起作用了。)

我发现了很多东西,但要么旧(不使用org.springframework.security.access.AccessDeniedException),要么使用无法使用的接口,因为 html和JSON必须符合返回类型方法签名(使用类@ControllerAdvice,而不是某些ModelAndView或String)。

我当前的异常处理程序测试方法,工作正常:

ResponseEntity

它基本上只决定返回错误的格式。

仍然维护 Spring默认异常处理程序时,如何降低此异常处理程序的优先级?我需要添加一些花哨的Java-Config吗?


我已经尝试创建一个实现@ExceptionHandler(Exception.class) public ResponseEntity<?> handleExceptions(Exception ex, HttpServletRequest request) throws Exception { HttpHeaders headers = new HttpHeaders(); //sort MIME types from accept header field String accept = request.getHeader("accept"); if(accept != null) { String[] mimes = accept.split(","); //sort most quality first Arrays.sort(mimes, new MimeQualityComparator()); //if json, return as json String firstMime = mimes[0].split(";")[0]; if (firstMime.equals("application/json")) { ExceptionWrapper exceptionVO = new ExceptionWrapper(ex); headers.setContentType(MediaType.APPLICATION_JSON); return new ResponseEntity<ExceptionWrapper>(exceptionVO, headers, HttpStatus.INTERNAL_SERVER_ERROR); } } //if not json, return as html headers.setContentType(MediaType.TEXT_HTML); String error = "<h1>Internal Server Error 500</h1><br>"; error += "Please copy the following text and send it to your server admin:<br><br>"; error += "<pre>" + ExceptionUtils.getStackTrace(ex) + "</pre>"; return new ResponseEntity<String>(error, headers, HttpStatus.INTERNAL_SERVER_ERROR); } 的类,并在那里覆盖了ResponseEntityExceptionHandler方法,但是没有用。 Spring抱怨它无法找到一个handleExceptionInternal对象传递给重写的方法(我也试过将它作为bean提供)。

我还尝试在HttpStatus上使用@Order,但没有改变任何内容。

Spring Version 4.0.9

0 个答案:

没有答案