簡體   English   中英

無法為 CSV 上傳 java spring 測試控制器

[英]Unable to test controller for CSV upload java spring

我有一個工作控制器,用於在發布請求中上傳 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

此錯誤是因為您上傳的文件大小。 它可以通過設置最大上傳大小來修復。

將此添加到您的主類。

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(10000000L);
    return new CommonsMultipartResolver();
}

此異常,有時會發生當@RequestParam("file")MultipartFile filefile正被空的或它沒有接收到任何屬性。 你可以在這里看到。 也許它可以解決你的問題。 或者您可以在application.properties文件中將文件大小指定為:

    spring.http.multipart.max-file-size=10MB
    spring.http.multipart.max-request-size=11MB

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM