package no.niths.application.rest.helper; import java.util.List; import javax.servlet.http.HttpServletRequest; import no.niths.application.rest.exception.BadRequestException; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUpload; import org.apache.commons.fileupload.FileUploadBase; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.springframework.web.multipart.commons.CommonsMultipartResolver; /** * This implementation makes up for the flaws in Apache's implementation used by * Spring. This implementation however handles exceptions that otherwise would * be impossible to catch. * */ public class CustomMultipartResolver extends CommonsMultipartResolver { @Override @SuppressWarnings("unchecked") protected MultipartParsingResult parseRequest( final HttpServletRequest req) { String encoding = determineEncoding(req); FileUpload fileUpload = prepareFileUpload(encoding); List<FileItem> fileItems; try { fileItems = ((ServletFileUpload) fileUpload).parseRequest(req); } catch (FileUploadBase.SizeLimitExceededException e) { throw new BadRequestException("Multipart data size too large"); } catch (FileUploadException e) { throw new BadRequestException("No multipart data present"); } return parseFileItems(fileItems, encoding); } }