spring.servlet.multipart.*配置是否适用于Jersey Multipart?
让Jersey直接读取Spring Boot application.properties中的Multipart配置
可以让Jersey复用Spring Boot application.properties 中的spring.servlet.multipart.*配置,无需单独维护jersey-multipart-config.properties文件,具体实现方式如下:
原理说明
Jersey的MultiPartFeature默认会从自身专属配置文件加载参数,但Spring Boot已将multipart相关配置封装到MultipartProperties类中,我们可以手动将这些Spring配置绑定到Jersey的MultipartConfigElement,让Jersey直接复用现有配置。
具体实现
创建一个Spring配置类,注入Spring的MultipartProperties,并在注册MultiPartFeature时传入自定义的MultipartConfigElement:
import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.server.ResourceConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.web.servlet.MultipartProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.MultipartConfigElement; @Configuration public class JerseyMultipartConfiguration { @Autowired private MultipartProperties multipartProperties; @Bean public ResourceConfig jerseyResourceConfig() { return new ResourceConfig() // 注册MultiPartFeature并绑定Spring的multipart配置 .register(MultiPartFeature.class) .property(MultiPartFeature.MULTIPART_CONFIG, buildMultipartConfig()); } private MultipartConfigElement buildMultipartConfig() { return new MultipartConfigElement( // 临时文件存储路径 multipartProperties.getLocation(), // 单个文件最大大小 multipartProperties.getMaxFileSize().toBytes(), // 整个请求最大大小 multipartProperties.getMaxRequestSize().toBytes(), // 文件大小阈值(超过后写入磁盘) (int) multipartProperties.getFileSizeThreshold().toBytes() ); } }
注意事项
- 如果项目已通过其他方式(比如自定义
ResourceConfig子类)注册了MultiPartFeature,需要确保在对应配置中统一设置MULTIPART_CONFIG属性,避免重复注册导致配置不生效。 - 配置完成后,Jersey处理文件上传时会使用
application.properties中指定的/tmp/tomcat作为临时文件路径,不再生成/tmp/MIME*格式的临时文件。
内容的提问来源于stack exchange,提问作者sbrattla
相关产品推荐
相关产品推荐

