2015-09-21 5 views
0

Я использую @ExceptionHandler для управления всем моим исключением и для возврата ответа JSON для любого REST API, который генерирует исключение. На данный момент я управляю двумя исключениями, первый - это ResourceNotFoundException, и он работает, но второй, FileExtensionException, не работает. Он выбрасывает это исключение в консоли eclipse и ничего не реагирует на ответ.Исключение с ответом Spring ExceptionHandler и Rest

2015-09-21 09: 09: 05,197 ОШИБКА 7500 --- [NiO-8080-Exec-2] .mmaExceptionHandlerExceptionResolver: Не удалось вызвать метод @ExceptionHandler: общественный matlab.ErrorResponse Matlab. ErrorController.errorHandler (java.lang.Exception)

org.springframework.web.HttpMediaTypeNotAcceptableException: не удалось найти приемлемое представление на org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters (AbstractMessageConverterMethodProcessor. java: 173) at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters (AbstractMessageConverterMethodProcessor.java:101) на org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue (RequestResponseBodyMethodProcessor.java: 185) на org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue (HandlerMethodReturnValueHandlerComposite.java:71) на org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java: 126) по адресу org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResol ver.doResolveHandlerMethodException (ExceptionHandlerExceptionResolver.java:362) на org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException (AbstractHandlerMethodExceptionResolver.java:60) на org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException (AbstractHandlerExceptionResolver.java:138) на org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException (HandlerExceptionResolverComposite.java:74) на org.springframework.web.servlet.DispatcherServlet.processHandlerException (DispatcherServlet.java:1183) по адресу org.springframework.web.servlet.DispatcherServlet.processDispatc HRESULT (DispatcherServlet.java:1020) на org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:971) на org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:893) на org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:967) на org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:858) в javax.servlet.http. HttpServlet.service (HttpServlet.java:622) в org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:843) по адресу javax.servlet.http.HttpServlet.service (HttpServlet.java:729) по адресу org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:291) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.apache.tomcat.websocket .server.WsFilter.doFilter (WsFilter.Java: 52) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) в орг .springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:77) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) на org.apache.catalina.core.ApplicationFilterChain .internalDoFilter (ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:85) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в org.apache.catalina .core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.springframework.boot.context.web.ErrorPageFilter.doFilter (ErrorPageFilter.java:116) по адресу org.springframework.boot.context.web.ErrorPageFilter.access $ 000 (ErrorPageFilter.java:60) at org.springframework.boot.context.web.ErrorPageFilter $ 1.doFilterInternal (ErrorPageFilter.java:91) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) на org.springframework. boot.context.web.ErrorPageFilter.doFilter (ErrorPageFilter.java:109) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain. doFilter (ApplicationFilterChain.java:206) по адресу org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:219) по адресу org.apache.catali na.core.StandardContextValve.invoke (StandardContextValve.java:106) на org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:502) на org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:142) на org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:79) на org.apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.java:616) на org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:88) на org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:518) на org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1091) на org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:673) в org.apache.tomcat.util .net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1526) на org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run (NioEndpoint.java:1482) в java.util.concurrent.ThreadPoolExecutor .runWorker (ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) по адресу org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) в java.lang.Thread.run (Thread.java:745)

2015-09-21 09: 09: 05,201 ОШИБКА 7500 --- [nio- 8080-Exec-2] osboot.context.web.ErrorPageFilter: Перенаправление на страницу ошибки из запроса [/ ManagmentFile/zipDownload] из-за исключением [ выбранный файл имеет другое расширение: XLSX, а не почтовый]

matlab.FileExtensionException: выбранный файл имеет другое расширение : xlsx и не zip на matlab.FileServices.getZipFile (FileServices.java:46) на matlab.ws.FileManagerImpl.getZip (FileManage rImpl.java:38) при sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) при sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 43) в java.lang.reflect.Method.invoke (Method.java:497) при org.springframework.web.method.support.InvocableHandlerMethod.doInvoke (InvocableHandlerMethod.java:221) в org.springframework.web .method.support.InvocableHandlerMethod.invokeForRequest (InvocableHandlerMethod.java:137) на org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java:110) на org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod (RequestMappingHandlerAdapter.java:776) на org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal (RequestMappingHandlerAdapter. Java: 705) на org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle (AbstractHandlerMethodAdapter.java:85) на org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:959) по адресу org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:893) по адресу org.springframework.web.servl et.FrameworkServlet.processRequest (FrameworkServlet.java:967) на org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:858) на javax.servlet.http.HttpServlet.service (HttpServlet.java:622) при org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:843) в javax.servlet.http.HttpServlet.service (HttpServlet.java:729) в org.apache.catalina.core.ApplicationFilterChain .internalDoFilter (ApplicationFilterChain.java:291) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java : 52) - org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.springframework.web.filter .HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:77) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java : 239) по адресу org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.Java: 206) на org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:85) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в орг .apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.springframework.boot.context.web .ErrorPageFilter.doFilter (ErrorPageFilter.java:116) по адресу org.springframework.boot.context.web.ErrorPageFilter.access $ 000 (ErrorPageFilter.java:60) в org.springframework.boot.context.web.ErrorPageFilter $ 1.doFilterInternal (ErrorPageFilter.java:91) в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в орг. springframework.boot.context.web.ErrorPageFilter.doFilter (ErrorPageFilter.java:109) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core. ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) по адресу org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:219) по адресу org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:106) на org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:502) на org.apache.catalina.core .StandardHostValve.invoke (StandardHostValve.java:142) на org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:79) на org.apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.java : 616) на org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:88) на org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:518) на org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1091) в org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:673) в org.apache.tomcat .util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1526) на org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run (NioEndpoint.java:1482) в java.util.concurrent .ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) в org.apache.tomcat.util.t hreads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) at java.lang.Thread.run (Thread.Java: 745)

Эти коды, вызываемые веб-сервисов:

public FileSystemResource getZipFile(String fileName) throws FileExtensionException { 
    String ext=FilenameUtils.getExtension(fileName); 
    if (ext!= "zip") 
     throw new FileExtensionException(ext + " and not zip"); 
    return new FileSystemResource(new File(fileName)); 
} 

исключение:

package matlab; 

public class FileExtensionException extends RuntimeException { 

    private static final long serialVersionUID = 1L; 

    public FileExtensionException(String message){ 
     super("The selected file has a different extension:" + message); 
    } 
} 

RestController:

@RequestMapping(value = "/files", method = RequestMethod.GET) 
public Response<Collection<FileModel>> getAllFiles(@RequestParam(value="path", defaultValue="/home") String path) throws ResourceNotFoundException { 
    Collection<FileModel> result; 
    result = file.getAllFiles(path); 
    return new Response<Collection<FileModel>>(HttpStatus.OK.value(),result); 
} 

@RequestMapping(value = "/zipDownload", produces="application/zip", method = RequestMethod.GET) 
@ResponseBody 
public FileSystemResource getZip(@RequestParam(value="filePath", required=true) String filePath) throws FileExtensionException{ 
    return file.getZipFile(filePath); 
} 

ResourceNotFoundException

public class ResourceNotFoundException extends Exception { 
    private static final long serialVersionUID = 1L; 

    public ResourceNotFoundException(String path){ 
     super("The specified path: "+ path +" doesn't exist"); 
    } 
} 

ErrorControl

@ControllerAdvice 
public class ErrorController { 

    /** 
    * 
    * @param e: exception thrown 
    * @return ErroreResponse 
    */ 
    @ExceptionHandler(Exception.class) 
    public @ResponseBody ErrorResponse errorHandler(Exception e){ 
     //Make the exception by buildErrorResponse 
     return ErrorResponseBuilder.buildErrorResponse(e); 
    } 

} 

ошибка сборки:

public class ErrorResponseBuilder { 

    public ErrorResponseBuilder() { 
    } 

    /** 
    * Build exception response beginning from exception 
    * @param e exception thrown 
    * @return ErrorResponse: response of an exception 
    */ 
    public static ErrorResponse buildErrorResponse(Exception e){ 
     StringWriter errors = new StringWriter(); 
     e.printStackTrace(new PrintWriter(errors)); 
     return new ErrorResponse(HttpStatusManager.getHttpCode(e),e.getClass().getName(),e.getMessage(),errors.toString()); 
    } 

} 

Где проблема? Благодаря

ответ

1

Попробуйте обновить конфигурацию пружины с:

<bean id="methodHandlerExceptionResolver" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver"> 
     <property name="messageConverters"> 
      <list> 
       <ref bean="stringHttpMessageConverter"/> 
       <ref bean="jsonHttpMessageConverter"/> 
       <ref bean="marshallingHttpMessageConverter"/> 
      </list> 
     </property> 
    </bean> 
+0

я изменился, но проблема здесь. Кроме того, как FileExtensionException, так и ResourceNotFoundException использовали исключение RuntimeException. Исключения обрабатываются и строить, но Отвечает FileExtensionException бросает исключение – luca

+0

ОК, я вижу проблема 'org.springframework.web.HttpMediaTypeNotAcceptableException: Не удалось найти приемлемые representation' Пожалуйста, обратите внимание на эти сообщения: HTTP: // StackOverflow. com/questions/7197268/spring-mvc-httpmediatypenotacceptableexception http://stackoverflow.com/questions/3340050/springs-json-not-being-resolved-with-appro-response –

+0

Это поможет мне подумать: http://stackoverflow.com/a/30335453/1397258 –

Смежные вопросы