I am trying to make a proof of concept in which a .Net system sends a file to a Rest endpoint in a Java Spring Boot application. I keep getting the error "The required parameter is missing." With this error, many SO questions arise, and I tried to find the solutions presented in them without any luck. Can anyone see what I'm doing wrong?
Here is my C # code:
private async Task<string> PostFileAsync(string uri, System.IO.FileStream fileStream) { using (var client = _httpClientFactory()) { using (var content = new MultipartFormDataContent()) { content.Add(new StreamContent(fileStream), "assetFile"); using (var message = await client.PostAsync(uri, content)) { return await message.Content.ReadAsStringAsync(); } } } }
Here's a request, as Fiddler sees:
POST http://10.0.2.2:8083/asset/1000/1001 HTTP/1.1 Content-Type: multipart/form-data; boundary="bac9aebd-d9ff-40ef-bcf3-4fffdd1b2c00" Host: 10.0.2.2:8083 Content-Length: 158 Expect: 100-continue Connection: Keep-Alive --bac9aebd-d9ff-40ef-bcf3-4fffdd1b2c00 Content-Disposition: form-data; name=assetFile foo,bar,10 foo2,bar2,12 --bac9aebd-d9ff-40ef-bcf3-4fffdd1b2c00--
Here is my controller:
@RestController @RequestMapping("/asset/") public class AssetController { @RequestMapping(path="{merchantId}/{assetId}", method=RequestMethod.POST) public String getAsset( HttpServletRequest request, @RequestParam("assetFile") MultipartFile file, @PathVariable("merchantId") long merchantId, @PathVariable("assetId") long assetId) throws IOException { return "It worked!"; } }
Here is my configuration:
@SpringBootApplication(exclude={MultipartAutoConfiguration.class}) public class MySpringApplication { public static void main(String[] args) { SpringApplication.run(MySpringApplication.class, args); } @Bean(name = "multipartResolver") public CommonsMultipartResolver multipartResolver() { System.out.println("multipartResolver()"); CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); return multipartResolver; } }
And here is the answer:
HTTP/1.1 400 Bad Request Server: Apache-Coyote/1.1 Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Date: Fri, 25 Mar 2016 19:34:55 GMT Connection: close f3 {"timestamp":1458934495566,"status":400,"error":"Bad Request","exception":"org.springframework.web.bind.MissingServletRequestParameterException","message":"Required MultipartFile parameter 'assetFile' is not present","path":"/asset/1000/1001"} 0
Edited because I sent the wrong C # code