当前位置: 首页 > 知识库问答 >
问题:

@Request estPart在Multipart Request中始终为空,Spring MVC 3.2.4

闻人英韶
2023-03-14

我正在开发一个基于Spring 3.2.4的小型RESTful服务,并按照本文编写一个自定义函数来发送Multipart请求

首先,在控制器中,我编写了示例函数进行测试

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

这是文本。txt文件

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

应用程序返回“成功创建!”并记录用户名。它工作正常。

其次,我以为一切都会很简单,但我错了。当我编写以下函数来发送用户和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"

和文本。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--

我面临@Request estPart始终为NULL的问题。详细信息:

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

我怎样才能修复它?

请帮我解决这个问题。

共有1个答案

扈俊健
2023-03-14

答案有点晚了,但可能仍然有用。这就是我使用@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

确保您转义了负载内容和一些有效的内容。zip(second-F是可选的,因为required设置为false)应该位于执行curl的同一目录中,或者用文件的有效路径替换它。

 类似资料:
  • 问题内容: 我正在创建一个新的Laravel项目,并且在调试表单请求的错误时,我注意到我的ErrorBag始终为空。即使在控制器返回时。我尝试了在互联网上找到的所有解决方案,但没有任何效果。 创建与作曲家新的项目,即使(如描述这里)使所有的字段为空时,我的开箱身份验证系统中有一个空的错误袋。 是的,所有路由都使用中间件组网络。 有什么想法导致此问题吗?(Session :: put()和Sessi

  • 我正在尝试使用多部分实体构建器从客户端构建多部分请求: 读取此内容的资源类如下: 我用的是带球衣2的Spring靴。在这一步,当我试图读取其中任何一个参数时,所有这些参数都是空值。因此响应得到一个内部服务器错误。 我还补充道: 客户端和服务器应用程序。 此外,还添加了依赖项 有人可以指出我错过了什么吗?我是否需要为服务器创建一个对象,而不是使用@FormDataParam?我已经使用多部分正确搜索

  • 问题内容: 我在尝试使用angularjs控制器推送数据时遇到问题。但是我所做的(IFormFile文件)总是空的。只有一些使用razor语法的示例,但是没有使用angular或jquery的示例。 HTML: 指示: 控制者 ASP.NET核心WebAPI: 我还尝试过使用formdata,因为它是在您使用razor语法发布时构造的。像这样: 也代替formData提供原始文件,如我在评论中所写

  • 我有两个不同的活动,在第一个活动中,我在一些EditText中输入一些信息,然后进入第二个活动,但当我返回时,第一个活动中EditText上的文本消失了。 以下是第一个活动的OnCreate() 我正在使用onSaveInstanceState方法保存信息 在进行调试时,我可以看到确实在onSaveInstanceState方法中填充了savedInstanceState捆绑包,但在OnCreat

  • 我将Spring Boot版本='1.4.0.rc1'与Spring Boot Stormpath 1.0.2一起使用。 我试图使用多部分文件上传,但MultipartFile在控制器中总是为空。 这是控制器,在下面的代码中,总是成功,总是失败: 我的集成测试使用改型: 我使用自动配置,所以我唯一的自定义配置类配置StormPath: 更新:这是传出请求。我不确定如何在多部分解析器本身中启用日志记

  • 我的测试类看起来像这样 在设置方法中,wac 始终为空。从spring boot文档中,总是创建一个模拟。 所以我希望它会在上面的代码中自动绑定,但这不会发生。 有人可以告诉我在这种情况下如何创建,以便它不像我的情况那样为空吗? 我正在运行spring boot测试,从带有springboot注释的类中调用它们。 测试(springboottest)和调用类(springboot)应用程序都位于下

  • 问题内容: 我尝试@Inject这样的字段(它是一个jar模块,在META-INF下存在空bean.xml): IDataProvider接口 数据提供者实现import javax.enterprise.context.ApplicationScoped; 我尝试注入DataProvider的类 如果我在Wildfly上运行此命令,则注入的dataProvider始终为null(DataCont

  • 我试图学习Android的SmartLocationLibrary获取位置,而我从它获取的位置总是空的,所以当我尝试用它做一些事情时,我会得到空对象引用错误。 我为SmartLocatonLibrary创建了一个实用工具类 实现“com.android.support”:appcompat-v7:28.0.0“实现”com.android.support“:support-v4:28.0.0”实现