所以我试图向我的后端发送一个文件和一个对象。然后我使用 Multipartfile 创建一个 Apache Poi 工作簿。使用 apache 的迭代器,我遍历文件,提取并保存我需要的内容。效果很好(它甚至将新数据保存在数据库中),但是到达 Return 语句时的函数没有返回。
它似乎没有终止,因为它没有返回 StatusCode 或对象(尝试了不同的选项,见下文)。我的其他 controlerfunctions 做得很好,所以我确保我的代码正在到达 return 语句。我从代码中取出行,直到问题不再发生。创建工作簿时似乎会发生这种情况。我尝试关闭工作簿。我什至尝试手动关闭 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>
有谁知道如何解决这个问题和/或为什么会出现这个问题?