gpt4 book ai didi

spring - 对于多部分请求,@RequestPart 始终为 null,Spring MVC 3.2.4

转载 作者:行者123 更新时间:2023-12-03 03:53:29 25 4
gpt4 key购买 nike

我正在开发一个基于 Spring 3.2.4 的小型 RESTful 服务,并按照 this article 编写一个自定义函数来发送多部分请求。

首先,在 Controller 中,我编写了示例函数来测试

@RequestMapping(value = "/createUser", method = RequestMethod.POST)
public @ResponseBody String createUser(@RequestBody User user)
{
if (user != null) {
log.debug("Username: " + user.getUsername());
}

return "Successfully created!";
}

User对象包含使用Jackson JSON获取和解析数据的用户信息。我还使用了 cURL 发送请求和我测试的命令

curl http://localhost:8080/user/createUser --data-binary @test.txt -X POST -i -H "Content-Type: application/json"

这是text.txt

{    
"id" : "123456",
"username" : "YOUR_USERNAME",
"password" : "YOUR_PASSWORD",
"email" : "YOUR_EMAIL"
}

应用程序返回“创建成功!”并记录了用户名。效果很好。

其次,我以为一切都会很简单,但我错了。当我编写以下函数来使用 User 和 MultipartFile 对象发送多部分请求时。

@RequestMapping(
value = "/createUser",
method = RequestMethod.POST,
consumes = {"multipart/mixed", "multipart/form-data"})
public @ResponseBody String createUser(
@RequestPart("user") @Valid User user,
@RequestPart("file") MultipartFile file) {

if (user != null) {
log.debug("Username: " + user.getUsername()); // The username is null
}

return "Successfully created!";
}

我继续使用cURL来通过命令进行测试

curl http://localhost:8080/user/createUser --data-binary @test.txt -X POST -i -H "Content-Type: multipart/mixed; boundary=4ebf00fbcf09"

并且text.txt文件已更改

--4ebf00fbcf09
Content-Disposition: form-data; name="user"
Content-Type: application/json; charset=UTF-8
Content-Transfer-Encoding: 8bit

{
"id" : "123456",
"username" : "YOUR_USERNAME",
"password" : "YOUR_PASSWORD",
"email" : "YOUR_EMAIL"
}

--4ebf00fbcf09
Content-Disposition: form-data; name="file"; filename="no_thumb.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: base64

<... File Data ...>

--4ebf00fbcf09--

我面临的问题是@RequestPart始终为NULL。详情:

  • 应用程序返回“创建成功!”
  • User 对象不为 null,但服务器记录了“用户名:null”,而 MultipartFile 对象也是如此。

我该如何解决这个问题?

请帮我解决这个问题。

最佳答案

答案有点晚了,但仍然有用。这就是我使用 @RequestPart 附加有效负载和文件的方法

@RequestMapping(method = RequestMethod.POST)
public @ResponseBody String create(@RequestPart Blah blah,
@RequestPart(value = "uploadfile", required=false) MultipartFile) {...}

使用下面的curl命令我也可以验证这一点

curl -i -X POST -H "Content-Type: multipart/mixed" \
-F "blah={\"name\":\"mypayloadname\"};type=application/json" \
-F "uploadfile=@somevalid.zip" http://localhost:8080/url/path

确保转义有效负载内容,并且 somevalid.zip(第二个 -F 是可选的,因为 required 设置为 false)应位于执行curl 的同一目录中,或将其替换为文件的有效路径。

关于spring - 对于多部分请求,@RequestPart 始终为 null,Spring MVC 3.2.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23468160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com