2014-04-07 58 views
1

我有这个REST控制器也应该处理异常。Spring REST多部分错误处理

@ExceptionHandler(MultipartException.class)注释不起作用explained

因此,我正在实施HandlerExceptionResolver,它基本上正在工作,但对于@ExceptionHandler而言,不如REST和JSON响应便利。

我想返回我的自定义类ValidationReportresolveException类似于@ExceptionHandler handleBadRequest。我无法创建一个ModelAndView,其中包含一个ValidationReport json响应。任何想法如何结合这两种风格?

@RestController 
class ValidationController implements HandlerExceptionResolver{ 
    static Logger LOG = LoggerFactory.getLogger(ValidationController.class); 


@RequestMapping(value="/validate", method=[POST]) 
public ValidationReport validate(MultipartFile file) { 
    LOG.info("received file ${file?.name}") 
    ValidationReport report = new ValidationReport(); 
    return report 
} 


@ResponseStatus(BAD_REQUEST) 
@ExceptionHandler(MultipartException.class) 
@ResponseBody ValidationReport handleBadRequest(HttpServletRequest req, Exception ex) { 
    return new ValidationReport(USER_ERROR, "you should not upload files bigger then xx MB") 
} 

@Override 
ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { 
    if (ex instanceof MultipartException){ 
     response.sendError(BAD_REQUEST.value(),ex.message) 
    } 
    return null 
} 
} 

回答

0

这不是一个解决方案,我不快乐的事情,但一个工程。我实现了HandlerExceptionResolver接口来捕获所有异常。

在实现的方法中,我只处理我感兴趣的异常。然后我向调用者发送错误代码并告诉他他做了什么错误。

@Override 
ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { 

    if (ex instanceof MultipartException){ 
     response.sendError(413,"Content is to big. Maximal allowed request size is: ${Application.MAX_REQUEST_SIZE}") 
    } 
}