Я пытаюсь создать конечную точку контроллера RESTful с помощью Spring MVC 3.2, чтобы загрузить файл, а также карту метаданных для этого файла. Определяется следующим образом:Тестирование Spring MVC Request Parameter Map и MultipartFile с MockMVC
@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