4
스프링 MVC 3.2를 사용하여 RESTful 컨트롤러 끝점을 만들어 파일 및 해당 파일의 메타 데이터 맵을 업로드하려고합니다. 나는 다음과 같은 테스트하기 위해 노력하고있어MockMVC를 사용하여 스프링 MVC 요청 매개 변수 맵 및 MultipartFile을 테스트하십시오.
@Controller
@RequestMapping("/file")
public class FileServiceController {
@RequestMapping(value="/upload", method=RequestMethod.POST)
@ResponseBody
public void upload(@RequestParam MultipartFile file,
@RequestParam String fileType,
@RequestParam(value="metadata") Map<String, List<String>> metadata) {
// TODO: stuff with things
}
}
:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { AppConfig.class })
@WebAppConfiguration
public class ProductIngestServiceControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Mock
private FileServiceController controller;
@Before
public void setup() {
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}
@Test
public void testUpload() {
MockMultipartFile mockFile = new MockMultipartFile("file", "This is a test file".getBytes());
Map<String, List<String>> metadata = new HashMap<>();
metadata.put("custom0", Arrays.asList("test1", "test2"));
metadata.put("custom1", Arrays.asList("test3", "test4", "test5"));
metadata.put("custom2", Arrays.asList("test6"));
Gson gson = new Gson();
String mapStr = gson.toJson(metadata);
mockMvc.perform(fileUpload(baseURL + "/test")
.file(mockFile)
.param("fileType", "test_type")
.param("metadata", mapStr))
.andDo(print())
.andExpect(status().isOk())
.andReturn();
}
}
가 난 그냥 "customX"항목을 포함하는지도를 기대 해요,하지만 모든 요청 매개 변수가 포함되어 다음과 같이 정의 대신 (MultipartFile을 제외하고 ...).
내가하려고하면 :
public void upload(@RequestParam MultiValueMap parameters) {
...
}
의 MultipartFile는 그 중 하나지도에 포함되지 않습니다.
내가 잘못 생각하고 있습니까? 나는 순간에 가지고 올 수있는 유일한 솔루션은 메타 데이터 RequestParam에 대한 문자열을 사용하고 같은 것을 할 수 있습니다 :
ObjectMapper mapper = new ObjectMapper();
JsonFactory factory = mapper.getJsonFactory();
JsonParser jp = factory.createJsonParser(testMap);
Map<String, List<String>> map = jp.readValueAs(Map.class);
를하지만 더러운 느낌.
도움을 주시면 감사하겠습니다. 감사!
MultipartFile을 가져올 수 없거나 거기에 없어야하는 메타 데이터의 값이 있다는 문제가 있습니까? – phantastes