gpt4 book ai didi

web-services - Spring MVC @RequestBody 在与@RequestParam MultipartFile 一起使用时给我一个空字符串

转载 作者:行者123 更新时间:2023-12-01 01:11:05 30 4
gpt4 key购买 nike

我有这个网络服务代码的问题

@Controller
@RequestMapping("/u_tutorial")
public class UploadTutorial
{
@RequestMapping(value = "tutorial1", method = RequestMethod.POST, headers = "Accept=application/json")
@ResponseStatus(value = HttpStatus.OK)
public void upload(@RequestBody String body, @RequestParam List<MultipartFile> file, Principal principal,
HttpServletRequest request)
{
System.out.println("body: " + body); // always empty

for (MultipartFile mf : file)
{
System.out.println("file: " + mf.getOriginalFilename());
}
}
}

情况是当我想在请求正文中上传包含一些数据的文件时,我的正文变量总是给我一个空字符串。

但是当我尝试只使用“@RequestBody String body”或“@RequestParam List file”时,它就像一个魅力。

查了一下,发现是InputStream的问题。一些建议的解决方案已经讨论过,但与我的问题不太相关(或者可能是,但我不明白)。

谁能给我一个解决方案?谢谢。

PS 1. 这是我的库版本
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.core.version>3.1.4.RELEASE</spring.core.version>
<spring.security.version>3.1.3.RELEASE</spring.security.version>
<spring.data.mongodb.version>1.1.0.RELEASE</spring.data.mongodb.version>
<cglib.version>2.2</cglib.version>
<aspectj.version>1.6.10</aspectj.version>
<mongodb.driver.version>2.10.1</mongodb.driver.version>
<!-- Logging -->
<slf4j.version>1.6.1</slf4j.version>
<log4j.version>1.2.14</log4j.version>
<javax.jstl-taglibs.version>1.1.2</javax.jstl-taglibs.version>
<jackson.version>1.9.3</jackson.version>
<!-- Testing -->
<mockito.version>1.8.5</mockito.version>
<junit.version>4.8.2</junit.version>
<!-- Plugins -->
<maven.copy.plugin.version>0.2.3</maven.copy.plugin.version>
<maven.compiler.plugin.version>2.3.2</maven.compiler.plugin.version>
<maven.apt.plugin.version>1.0</maven.apt.plugin.version>
<!-- Utilities -->
<apache.common.io.version>2.4</apache.common.io.version>
<apache.common.fileupload.version>1.2.2</apache.common.fileupload.version>
<jodatime.version>2.1</jodatime.version>
</properties>

PS 2. 对不起我的英语。

最佳答案

您可以将“body”字符串设为表单上的隐藏字段,并将其作为另一个 @RequestParam 发布,而不是将其作为单独的 @RequestBody 参数。所以你的表单看起来像这样:

<form id="myForm" method="post" enctype="multipart/form-data">
<input type="hidden" name="body" value="bodyValue"/>
<input type="file" name="file"/>
...

Controller 看起来像这样:
public void upload(@RequestParam String body, @RequestParam List<MultipartFile> file, Principal principal, HttpServletRequest request)
....

关于web-services - Spring MVC @RequestBody 在与@RequestParam MultipartFile 一起使用时给我一个空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15502054/

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