[英]Unable to test spring rest controller because of NoSuchBeanDefinitionException
[英]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 file
的file
正被空的或它沒有接收到任何屬性。 你可以在這里看到。 也許它可以解決你的問題。 或者您可以在application.properties
文件中將文件大小指定為:
spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=11MB
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.