大きなファイルを意図的にダウンロードして例外を取得します。処理コントローラ:スプリングブート。ユーザーにエラーメッセージを返す方法
2017-10-23 14:44:13.635 ERROR 15680 --- [nio-8080-exec-2] s.web.GlobalControllerExceptionHandler : Exception in uploadFile at request http://localhost:8080/painter/uploadFile
org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field uploadfile exceeds its maximum permitted size of 3145728 bytes.
はとても、クライアントへのメッセージとステータスが渡された例外MultipartException(呼び出しをキャッチ
@ControllerAdvice
public class GlobalControllerExceptionHandler extends ResponseEntityExceptionHandler implements ErrorViewResolver {
private static final Logger LOG = LoggerFactory.getLogger(GlobalControllerExceptionHandler.class);
private static final String DEFAULT_ERROR_VIEW = "error";
@ExceptionHandler(value = {MultipartException.class})
@ResponseBody
ResponseEntity<?> uploadFile(HttpServletRequest request, MultipartException ex) {
LOG.error("Exception in uploadFile at request " + request.getRequestURL(), ex);
return new ResponseEntity<String>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
@ExceptionHandler(value = {Exception.class})
public ModelAndView defaultErrorHandler(HttpServletRequest request, Exception e) {
ModelAndView mav = new ModelAndView(DEFAULT_ERROR_VIEW);
LOG.error("Exception at request " + request.getRequestURL(), e);
mav.addObject("timestamp", new Date());
mav.addObject("error", e.getMessage());
mav.addObject("path", request.getRequestURL());
return mav;
}
@Override
public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus httpStatus, Map<String, Object> map) {
ModelAndView mav = new ModelAndView(DEFAULT_ERROR_VIEW);
LOG.error(map.toString());
/**
timestamp --- Fri Oct 20 09:46:58 MSK 2017
status --- 404
error --- Not Found
message --- /hudo
path --- /hudo
**/
map.forEach(mav::addObject);
return mav;
}
}
:
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST, produces={"application/text; charset=UTF-8"})
@ResponseBody
public ResponseEntity<?> uploadFile(
@RequestParam("uploadfile") MultipartFile uploadfile) throws Exception {
String fileName = storageService.uploadFile(uploadfile);
return new ResponseEntity<String>(fileName, HttpStatus.OK);
}
私は、グローバルインターセプタを持っていますアヤックスにいた)。答えは:
POST http://localhost:8080/painter/uploadFile net::ERR_CONNECTION_ABORTED
status - 0 error - undefined
どのようにしてインターセプタからの応答を得ることができますか?
どのLOG.errorが呼び出されていますか、どの例外メソッドが呼び出されていますか? –
エラーログ(大きなもの)自分のクライアントにメッセージを返す必要がある場合はどうすればいいですか?たとえば、「あなたのファイルは3MBの最大値を超えています。メソッドは値= {MultipartException.class}で呼び出されます – Aleksandr
https://stackoverflow.com/a/46655226/3530898 –