1

我有一个用于在发布请求中上传 csv 的工作控制器。邮递员状态为 200,测试时状态为 400。我正在努力寻找问题所在。

控制器:

@RestController
@RequestMapping("/csv")
public class CsvController {
    final CsvService csvService;

    public CsvController(CsvService csvService) {
        this.csvService = csvService;
    }

    @PostMapping("/upload")
    public ResponseEntity<Response> uploadFile(@RequestParam("file")MultipartFile file) {
        if(CsvHelper.hasCSVFormat(file)) {
            Response response = csvService.save(file);

            return new ResponseEntity<>(response, HttpStatus.valueOf(response.getStatus()));
        }

        Response response = new Response().setStatus(400).setMessage("Please upload a CSV file");
        return new ResponseEntity<>(response, HttpStatus.valueOf(response.getStatus()));
    }
}

CsvHelper 实用程序:

public class CsvHelper {
    public static String TYPE = "text/csv";

    public static boolean hasCSVFormat(MultipartFile file) {
        return TYPE.equals(file.getContentType());
    }
}

测试:

@ExtendWith(SpringExtension.class)
@WebMvcTest(value = CsvController.class)
public class TestControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private CsvService csvService;

    @Test
    void status200WhenUploadingCSV() throws Exception {
        MockMultipartFile mockMultipartFile = new MockMultipartFile(
                "multipartFile",
                "template.csv",
                "text/csv",
                new ClassPathResource("template.csv").getInputStream());

        mockMvc.perform(MockMvcRequestBuilders.multipart("/csv/upload")
                .file(mockMultipartFile))
                .andExpect(status().isOk());
}}

当测试失败时,我可以看到这个 Resolved Exception: Type = org.springframework.web.multipart.support.MissingServletRequestPartException

4

2 回答 2

0

此错误是因为您上传的文件大小。它可以通过设置最大上传大小来修复。

将此添加到您的主要课程中。

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(10000000L);
    return new CommonsMultipartResolver();
}
于 2021-10-26T17:39:51.847 回答
0

@RequestParam("file")MultipartFile file当为file空或未接收任何属性时,有时会发生此异常。你可以在这里看到。也许它可以解决你的问题。或者您可以将文件中的文件大小指定application.properties为:

    spring.http.multipart.max-file-size=10MB
    spring.http.multipart.max-request-size=11MB
于 2021-10-26T17:39:53.140 回答