@Override public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) { exceptionResolvers.add(new DefaultHandlerExceptionResolver()); } });
/** * Sets the {@linkplain #setOrder(int) order} to {@link #LOWEST_PRECEDENCE}. */ public DefaultHandlerExceptionResolver() { setOrder(Ordered.LOWEST_PRECEDENCE); setWarnLogCategory(getClass().getName()); }
return handleHttpRequestMethodNotSupported( (HttpRequestMethodNotSupportedException) ex, request, response, handler); return handleHttpMediaTypeNotSupported( (HttpMediaTypeNotSupportedException) ex, request, response, handler); return handleHttpMediaTypeNotAcceptable( (HttpMediaTypeNotAcceptableException) ex, request, response, handler); return handleMissingPathVariable( (MissingPathVariableException) ex, request, response, handler); return handleMissingServletRequestParameter( (MissingServletRequestParameterException) ex, request, response, handler); return handleServletRequestBindingException( (ServletRequestBindingException) ex, request, response, handler); return handleConversionNotSupported( (ConversionNotSupportedException) ex, request, response, handler); return handleTypeMismatch( (TypeMismatchException) ex, request, response, handler); return handleHttpMessageNotReadable( (HttpMessageNotReadableException) ex, request, response, handler); return handleHttpMessageNotWritable( (HttpMessageNotWritableException) ex, request, response, handler);
@ExceptionHandler @ResponseBody public Object handleException(HttpServletRequest request, final HttpServletResponse response, Object handler, Exception ex) throws IOException { logger.debug("Error in controller", ex); final AtomicInteger errorCode = new AtomicInteger(500); if(ex instanceof ComponentValidationException || ex instanceof IllegalArgumentException) { errorCode.set(422); } else if(ex instanceof AccessDeniedException) { errorCode.set(HttpServletResponse.SC_FORBIDDEN); } else { // Using DefaultHandlerExceptionResolver to map standard Spring exception // like NoSuchRequestHandlingMethodException (HTTP 404) etc... HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(response) { public void sendError(int sc, String msg) throws IOException { errorCode.set(sc); } public void sendError(int sc) throws IOException { errorCode.set(sc); } }; new DefaultHandlerExceptionResolver().resolveException(request, responseWrapper, handler, ex); } return ResponseEntity.status(errorCode.get()).body(new ErrorResponse(ex)); }
@Before public void setup() { exceptionResolver.setWarnLogCategory(exceptionResolver.getClass().getName()); }
/** * Discovers existing {@link org.springframework.web.servlet.HandlerExceptionResolver exception resolvers} in the provided * context. Provides the default resolvers (see original dispatcher servlet) in case no resolvers * exist in the context. */ private void configureExceptionResolvers() { Map<String, HandlerExceptionResolver> resolvers = this.factory.getBeansOfType(HandlerExceptionResolver.class); DefaultHandlerExceptionResolver defaultResolver; if (resolvers.isEmpty()) { defineBean(ExceptionHandlerExceptionResolver.class); defineBean(ResponseStatusExceptionResolver.class); defaultResolver = defineBean(DefaultHandlerExceptionResolver.class); } else { defaultResolver = getBean(DefaultHandlerExceptionResolver.class).orElse(null); } if (defaultResolver != null) { defaultResolver.setWarnLogCategory("mvc"); } }
return handleHttpRequestMethodNotSupported( (HttpRequestMethodNotSupportedException) ex, request, response, handler); return handleHttpMediaTypeNotSupported( (HttpMediaTypeNotSupportedException) ex, request, response, handler); return handleHttpMediaTypeNotAcceptable( (HttpMediaTypeNotAcceptableException) ex, request, response, handler); return handleMissingPathVariable( (MissingPathVariableException) ex, request, response, handler); return handleMissingServletRequestParameter( (MissingServletRequestParameterException) ex, request, response, handler); return handleServletRequestBindingException( (ServletRequestBindingException) ex, request, response, handler); return handleConversionNotSupported( (ConversionNotSupportedException) ex, request, response, handler); return handleTypeMismatch( (TypeMismatchException) ex, request, response, handler); return handleHttpMessageNotReadable( (HttpMessageNotReadableException) ex, request, response, handler); return handleHttpMessageNotWritable( (HttpMessageNotWritableException) ex, request, response, handler);
exceptionResolvers.add(responseStatusResolver); exceptionResolvers.add(new DefaultHandlerExceptionResolver());
/** * Sets the {@linkplain #setOrder(int) order} to {@link #LOWEST_PRECEDENCE}. */ public DefaultHandlerExceptionResolver() { setOrder(Ordered.LOWEST_PRECEDENCE); setWarnLogCategory(getClass().getName()); }
return handleHttpRequestMethodNotSupported( (HttpRequestMethodNotSupportedException) ex, request, response, handler); return handleHttpMediaTypeNotSupported( (HttpMediaTypeNotSupportedException) ex, request, response, handler); return handleHttpMediaTypeNotAcceptable( (HttpMediaTypeNotAcceptableException) ex, request, response, handler); return handleMissingPathVariable( (MissingPathVariableException) ex, request, response, handler); return handleMissingServletRequestParameter( (MissingServletRequestParameterException) ex, request, response, handler); return handleServletRequestBindingException( (ServletRequestBindingException) ex, request, response, handler); return handleConversionNotSupported( (ConversionNotSupportedException) ex, request, response, handler); return handleTypeMismatch( (TypeMismatchException) ex, request, response, handler); return handleHttpMessageNotReadable( (HttpMessageNotReadableException) ex, request, response, handler); return handleHttpMessageNotWritable( (HttpMessageNotWritableException) ex, request, response, handler);
@Before public void setup() { this.servletRequest = new MockHttpServletRequest("GET", "/"); this.servletResponse = new MockHttpServletResponse(); this.request = new ServletWebRequest(this.servletRequest, this.servletResponse); this.exceptionHandlerSupport = new ApplicationExceptionHandler(); this.defaultExceptionResolver = new DefaultHandlerExceptionResolver(); }
/** * Sets the {@linkplain #setOrder(int) order} to {@link #LOWEST_PRECEDENCE}. */ public DefaultHandlerExceptionResolver() { setOrder(Ordered.LOWEST_PRECEDENCE); setWarnLogCategory(getClass().getName()); }
exceptionResolvers.add(responseStatusResolver); exceptionResolvers.add(new DefaultHandlerExceptionResolver());
private List<HandlerExceptionResolver> extractResolvers() { List<HandlerExceptionResolver> list = new ArrayList<>(); list.addAll( this.beanFactory.getBeansOfType(HandlerExceptionResolver.class).values()); list.remove(this); AnnotationAwareOrderComparator.sort(list); if (list.isEmpty()) { list.add(new DefaultHandlerExceptionResolver()); } return list; }
/** * A method available to subclasses for adding default * {@link HandlerExceptionResolver HandlerExceptionResolvers}. * <p>Adds the following exception resolvers: * <ul> * <li>{@link ExceptionHandlerExceptionResolver} for handling exceptions through * {@link org.springframework.web.bind.annotation.ExceptionHandler} methods. * <li>{@link ResponseStatusExceptionResolver} for exceptions annotated with * {@link org.springframework.web.bind.annotation.ResponseStatus}. * <li>{@link DefaultHandlerExceptionResolver} for resolving known Spring exception types * </ul> */ protected final void addDefaultHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) { ExceptionHandlerExceptionResolver exceptionHandlerResolver = createExceptionHandlerExceptionResolver(); exceptionHandlerResolver.setContentNegotiationManager(mvcContentNegotiationManager()); exceptionHandlerResolver.setMessageConverters(getMessageConverters()); exceptionHandlerResolver.setCustomArgumentResolvers(getArgumentResolvers()); exceptionHandlerResolver.setCustomReturnValueHandlers(getReturnValueHandlers()); if (jackson2Present) { exceptionHandlerResolver.setResponseBodyAdvice( Collections.<ResponseBodyAdvice<?>>singletonList(new JsonViewResponseBodyAdvice())); } exceptionHandlerResolver.setApplicationContext(this.applicationContext); exceptionHandlerResolver.afterPropertiesSet(); exceptionResolvers.add(exceptionHandlerResolver); ResponseStatusExceptionResolver responseStatusResolver = new ResponseStatusExceptionResolver(); responseStatusResolver.setMessageSource(this.applicationContext); exceptionResolvers.add(responseStatusResolver); exceptionResolvers.add(new DefaultHandlerExceptionResolver()); }