问题描述
所以我试图向我的后端发送一个文件和一个对象。然后我使用 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 (将#修改为@)