java - 所需的 MultipartFile 参数不存在 - Spring Boot REST POST

标签 java c# rest spring-boot

我正在尝试进行概念验证,其中涉及 .Net 系统将文件发布到 Java Spring Boot 应用程序上的 Rest 端点。我不断收到“所需参数不存在”错误。这个错误有很多 SO 问题,我已经尝试了那些没有运气的解决方案。谁能看出我做错了什么?

这是我的 C# 代码:

    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();
                }
            }
        }
    }

这是 Fiddler 看到的请求:

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--

这是我的 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!";
    }
}

这是我的配置:

@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;
    }
}

这是回复:

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

已编辑,因为我发布了错误的 C# 代码

最佳答案

好吧,也许我没有尝试过我在 SO 上看到的所有解决方案。

This question had a solution for me.

我必须使用 @ModelAttribute 而不是 @RequestParam

关于java - 所需的 MultipartFile 参数不存在 - Spring Boot REST POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36227491/

相关文章:

JavaFX StackPane 不显示方法内部的对象

c# - 将 C++ 字符串 vector 编码到 C#

rest - 在 JAX-RS 过滤器中捕获响应负载

rest - 为什么flutter拒绝在本地主机上连接:8000 or 127. 0.01 :8000?

java - 使用 Paho Java 库处理 MQTT 消息的最佳实践

java - 我可以使用 4096 位作为带有 OAEP 填充的 Java RSA 的 key 长度吗?

java - setExtendedState(JFrame.MAXIMIZED_BOTH) 或 GraphicsDevice 设备哪个更好?

c# - 可以将 View 传递给 MVVM 中的 ViewModel 吗?

C# - 拦截子类中的属性更改

wcf - 将 REST 方法添加到 WCF 数据服务?