У меня проблемы при попытке проанализировать HttpServletRequest, содержащий файлы, состоящие из нескольких частей.Я перепробовал все решения других постов, касающиеся исключения, с которым я сталкиваюсь, но, похоже, ничего не работает.
Это соответствующие зависимости для проекта:
<project>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.13.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.25.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
SpringBoot Инициализатор приложения:
@SpringBootApplication
public class ApplicationBoot extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ApplicationBoot.class);
}
public static void main(String[] args) {
SpringApplication.run(ApplicationBoot.class, args);
}
}
Конфигурация инициализатора Jersey и компонент multipartResolver:
@Configuration
@ApplicationPath("/rest")
public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
register(AttachmentResource.class);
register(ContentResource.class);
register(MultiPartFeature.class);
}
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(100000);
return multipartResolver;
}
}
И класс, где я сталкиваюсь с проблемой, касающейся многоэтапного анализа, а также ресурса:
@Component
@Path("/attachments")
public class AttachmentResource {
@POST
@Path("/store")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response store(@Context HttpServletRequest httpRequest) {
for (Part part : httpRequest.getParts()) {
...
}
}
}
Когда вызывается getParts (), я получаю java.lang.IllegalStateException: Невозможно обработать детали, так как не была предоставлена конфигурация из нескольких частей
Я добавил эти свойства в application.properties:
spring.http.multipart.enabled=true
spring.http.multipart.max-file-size=100MB
spring.http.multipart.max-request-size=100MB
spring.http.multipart.file-size-threshold=0
Как показано здесь: https://docs.spring.io/spring-boot/docs/1.5.13.RELEASE/reference/html/common-application-properties.html
А также это то, что SpringBoot регистрирует с включенным отладочным выходом при запускеотносительно конфигурации Multipart:
=========================
AUTO-CONFIGURATION REPORT
=========================
Positive matches:
-----------------
MultipartAutoConfiguration matched:
- @ConditionalOnClass found required classes 'javax.servlet.Servlet', 'org.springframework.web.multipart.support.StandardServletMultipartResolver', 'javax.servlet.MultipartConfigElement'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- @ConditionalOnProperty (spring.http.multipart.enabled) matched (OnPropertyCondition)
MultipartAutoConfiguration#multipartConfigElement matched:
- @ConditionalOnMissingBean (types: javax.servlet.MultipartConfigElement; SearchStrategy: all) did not find any beans (OnBeanCondition)
Negative matches:
-----------------
MultipartAutoConfiguration#multipartResolver:
Did not match:
- @ConditionalOnMissingBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) found bean 'multipartResolver' (OnBeanCondition)
Позже отредактируйте:
Если я разверну приложение в автономном tomcat 8 и добавлю его в con / context.xml, оно будет работать:
<Context allowCasualMultipartParsing="true">
илидобавьте файл context.xml в src / main / webapp / META-INF в проект:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="" allowCasualMultipartParsing="true"/>
Но это не сработает, если я начну проект со встроенным Tomcat.