修改Spring中MaxUploadSizeExceededException返回提示

修改Spring中MaxUploadSizeExceededException返回提示

Spring中会有一个CommonsMultipartResolver来限制文件上传大小,但是返回提示的时候却是一段英文(Maximum upload ……巴拉巴拉很长一串),用户体验极其不好,并没有找到在哪里能够直接修改配置,下面说一下修改提示的方法:
首先贴出MaxUploadSizeExceededException的代码:


public class MaxUploadSizeExceededException extends MultipartException {
    private final long maxUploadSize;

    public MaxUploadSizeExceededException(long maxUploadSize) {
        this(maxUploadSize, (Throwable)null);
    }

    public MaxUploadSizeExceededException(long maxUploadSize, Throwable ex) {
        super("Maximum upload size of " + maxUploadSize + " bytes exceeded", ex);
        this.maxUploadSize = maxUploadSize;
    }

    public long getMaxUploadSize() {
        return this.maxUploadSize;
    }
}

这里能够看到那一长串的提示写在了代码里面,现在就需要找到引用这个类的地方来重写一个即可。经过查找,在CommonsMultipartResolver类中找到了如下代码:

    protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
        String encoding = this.determineEncoding(request);
        FileUpload fileUpload = this.prepareFileUpload(encoding);

        try {
            List ex = ((ServletFileUpload)fileUpload).parseRequest(request);
            return this.parseFileItems(ex, encoding);
        } catch (SizeLimitExceededException var5) {
            throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), var5);
        } catch (FileSizeLimitExceededException var6) {
            throw new MaxUploadSizeExceededException(fileUpload.getFileSizeMax(), var6);
        } catch (FileUploadException var7) {
            throw new MultipartException("Failed to parse multipart servlet request", var7);
        }
    }

能够看到这里引用了两次MaxUploadSizeExceededException类,现在我们不仅仅需要重写MaxUploadSizeExceededException,还需要重写一次CommonsMultipartResolver。
所以又再次查找代码,在我这里是在SpringMvcConfiguration类中调用了这个CommonsMultipartResolver。所以做重写:

class MyCommonsMultipartResolver extends CommonsMultipartResolver{
        @Override
        protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
            String encoding = this.determineEncoding(request);
            FileUpload fileUpload = this.prepareFileUpload(encoding);
            try {
                List ex = ((ServletFileUpload)fileUpload).parseRequest(request);
                return this.parseFileItems(ex, encoding);
            } catch (FileUploadBase.SizeLimitExceededException var5) {
                throw new MyMultipartException(fileUpload.getSizeMax(), var5);
            } catch (FileUploadBase.FileSizeLimitExceededException var6) {
                throw new MyMultipartException(fileUpload.getFileSizeMax(), var6);
            } catch (FileUploadException var7) {
                throw new MultipartException("无法解析多个servlet的请求");
            }
        }
    }

    class MyMultipartException extends MultipartException{
        private final long maxUploadSize;

        public MyMultipartException(long maxUploadSize) {
            this(maxUploadSize, (Throwable)null);
        }

        public MyMultipartException(long maxUploadSize, Throwable ex) {
            super("上传文件大小不得超过" + maxUploadSize/1024/1024 + "M");
            this.maxUploadSize = maxUploadSize;
        }

        public long getMaxUploadSize() {
            return this.maxUploadSize;
        }
    }

然后在原来调用CommonsMultipartResolver的地方调用现在新写的MyCommonsMultipartResolver类即可。打完收工,谢谢各位看官。

你可能感兴趣的:(Java)