从 MultipartFile 创建 apache poi 工作簿时,Spring Boot 控制器功能不会终止或返回

问题描述

所以我试图向我的后端发送一个文件一个对象。然后我使用 multipartfile 创建一个 Apache Poi 工作簿。使用 apache 的迭代器,我遍历文件提取并保存我需要的内容。这运行良好(它甚至将新数据保存在数据库中),但是到达 Return 语句时的函数没有返回

它似乎没有终止,因为它没有返回 StatusCode 或对象(尝试了不同的选项,见下文)。我的其他控制器功能运行良好,所以我确保我的代码到达返回语句。我从代码中取出几行,直到问题不再发生。创建工作簿时似乎会发生这种情况。我尝试关闭工作簿。我什至尝试手动关闭 Inputstream,但错误仍在发生。我尝试更改返回值(返回 Responseentity、返回 DTO、具有 void 函数并设置 @HTTPResponseStatus),但这并没有改变行为。当我拿出工作簿时,所有三种方法都有效。我尝试了不同版本的 apache poi(5.0.0、4.0.0、3.15)。但是还是没有返回值。

这是我的控制器:

@RestController
@RequestMapping("/trafficdata")
public class TrafficDataController {

@Autowired
TrafficDataRepository trafficDataRepository;

@PostMapping(value = "/filedata",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity addDataFromFile(@RequestParam("model") String model,@RequestParam(value = "file",required = false) multipartfile file) throws PermissionDeniedException,FileNotImportableException,DataKeyAlreadyTakenException,JsonProcessingException {
    UserDetailsImpl userDetails = (UserDetailsImpl) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

    if(!userDetails.isProfessor()){
        throw new PermissionDeniedException();
    }

    ObjectMapper mapper = new ObjectMapper();
    FileTrafficDataInputDTO trafficDataInputDTO = mapper.readValue(model,FileTrafficDataInputDTO.class);

    if(trafficDataRepository.existsByDataKey(trafficDataInputDTO.getDataKey())){
        throw new DataKeyAlreadyTakenException(trafficDataInputDTO.getDataKey());
    }

    Workbook workbook;
    DataFormatter dataFormatter = new DataFormatter();
    String lowerCaseFileName = file.getoriginalFilename().toLowerCase();
    InputStream inputStream;
    try {
        inputStream = file.getInputStream();
        workbook = WorkbookFactory.create(inputStream); //as soon as I take out this,it works
    } catch (IOException e) {
        e.printstacktrace();
        throw new FileNotImportableException(file.getoriginalFilename());
    }

    try {
        //I tried something here inputStream.close();
        workbook.close();
    } catch (IOException e) {
        e.printstacktrace();
    }
    /* working with the data */
    return new ResponseEntity(HttpStatus.CREATED);
}}

这些是我的 Maven 依赖项:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-ldap</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <version>2.0.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.apache.directory.api</groupId>
        <artifactId>api-all</artifactId>
        <version>2.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.1</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.12.1</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.12.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.0.0</version>
    </dependency>
</dependencies>

有人知道如何解决问题和/或问题发生的确切原因吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)