文件上传在不同场景下有不同的限制规则,而Spring boot提供的限制文件大小的配置是针对全局生效的,因此需要提供一种可针对每个上传接口指定不同的文件大小限制的校验方式
1. 编程式校验
在每个处理逻辑中通过org.springframework.web.multipart.MultipartFile#getSize
获取上传文件的大小,进而验证其大小是否符合条件
因为实现简单,这种方式看起来也可以接受。但是同样的逻辑要在多个上传场景中使用,即便将其封装为工具类,也需要在多个地方调用,从单一职责方面考虑,这种方式欠佳。
2. 声明式校验
说到校验,就不得不提一下hibernate-validator校验框架了,使用一个注解就可以完成对请求参数的校验,而不需要手动编写额外的代码。
可惜的是我并没有找到可以校验MultipartFile类型的注解。既然叫框架,没有扩展性怎么好意思呢,于是乎我分析了下@Max注解生效的实现原理,经过与源码的友好交流,终于让我发现了ConstraintValidator
这个玩意
它就是校验各种数据的Validator(感觉翻译成中文就少了些感觉,所以就先这样吧)的抽象,其中A
就是注解,T
就是要校验的数据类型
可以发现,它的实现类非常多,这些都是针对不同数据类型的Validat