我有一个 Spring Boot 应用程序可以响应大多数请求,但不能完全响应带有多部分表单数据的 POST。我读过所有 Spring 请求都通过 DispatcherServlet。但是,当我调试 Spring 应用程序时,DispatcherServlet 中没有任何内容可以捕获此请求。
但是,它确实会做出反应,所以它正在做某事。具体来说,当请求进来时,服务器会记录如下内容:
2021-03-07 03:10:56 DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Looking up handler method for path /bluecost/spreadsheet/upload/SSCSpreadsheetUpload-01012020.xlsx
2021-03-07 03:10:57 TRACE o.s.w.s.m.m.a.RequestMappingHandlerMapping - Found 1 matching mapping(s) for [/bluecost/spreadsheet/upload/SSCSpreadsheetUpload-01012020.xlsx] : [{[/bluecost/spreadsheet/upload/{filename}],methods=[POST]}]
2021-03-07 03:10:57 DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Returning handler method [public org.springframework.http.ResponseEntity<java.util.HashMap<java.lang.String, java.lang.Object>> com.ibm.cio.cloud.cost.spreadsheet.rest.controller.BlueCostRestController.uploadSpreadsheet(org.springframework.web.multipart.MultipartFile,java.lang.String)]
FWIW,我在 Eclipse 中将它作为 Spring Boot 应用程序启动。我的问题是,如果不是 DispatcherServlet,当 Web 请求进入时 Spring 的初始入口点是什么?
指示 Spring 版本的 POM 片段
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/>
</parent>
它找到但拒绝运行的 web 方法是
@ApiOperation(
value = "Upload spreadsheet data file",
notes = "Allows you to upload a single file with each request",
consumes = "application/json")
@PostMapping("/spreadsheet/upload/{filename}")
public ResponseEntity<HashMap<String,Object>> uploadSpreadsheet(@RequestParam MultipartFile file, @PathVariable("filename") String filename) {
请注意,它不会发出任何错误,也没有堆栈跟踪。我可能没有提供足够的解决方案,但如果我知道在哪里设置断点,我会更高兴。