当前位置: 首页 > 面试题库 >

Spring如何一起发送@Requestbody和@Requestpart

匡旭东
2023-03-14
问题内容

我想使用curl在控制器中一起传递json和文件。我在控制器中有以下方法。

@PostMapping(value = /api/campaign, headers = {"content-type=multipart/mixed","content-type=multipart/form-data"})
    @ResponseBody
    @ResponseStatus(HttpStatus.CREATED)
    public @Valid ResponseDTO campaignCreator (@Valid @RequestBody CampaignCreatorDTO campaignCreatorDTO, @RequestPart("file") MultipartFile adGraphic){
}

下面是curl命令

curl -i -X POST -H "Content-Type: multipart/mixed" -d "campaignCreatorDTO={\"edipi\":123456789,\"firstName\":\"John\",\"lastName\":\"Smith\",\"email\":\"john.smith@gmail.com\"};type=application/json" -F "file=@newfile.png;type=image/png"  http://localhost:8080/api/campaign

控制器方法没有被调用。当我将json放在文件中并在curl命令中使用文件代替直接json时,它可以工作。但我不想将文件用于json。

我试图将@RequestPart用于json对象,但存在相同的问题。

有什么办法可以在json中传递多部分文件?我是说CampaignCreatorDTO对象?

更新::现在我可以通过两种类型的RequestPart,但是图像大小即将为0字节。尽管iamge存在于文件系统中。

更新了代码::现在使用以下代码,并将文件大小设为0字节。

@PostMapping(value = /api/campaign, consumes = {"multipart/form-data","multipart/mixed"})
    @ResponseBody
    @ResponseStatus(HttpStatus.CREATED)
    public @Valid ResponseDTO campaignCreator (@Valid @RequestPart("json") CampaignCreatorDTO campaignCreatorDTO, @RequestPart("file") MultipartFile adGraphic) {
}

我尝试了此链接中给出的解决方案,但仍然是同一问题

这是客户端将数据暂停到服务器的方式

let formData = new FormData()

const blob = new Blob([json], {
type: 'application/json'
});

formData.append("json", blob)
formData.append("file", values.adCreativeImageCover)

let authToken = sessionStorage.getItem("authToken")

fetch(/api/campaign, {
method: "POST",
headers: {
'Accept': 'application/json',
'X-Auth-Token': authToken,
},
mode: 'cors',
body: formData
})

问题答案:

我通过在配置中实现multipartresolver解决了该问题。

@Bean
    public MultipartResolver multipartResolver() {
        return new StandardServletMultipartResolver();
    }


 类似资料:
  • 我正在Spring-Boot中实现微服务。我尝试将@RequestBody与一个MultipartFile一起发送。我在stackoverflow中引用了一些问题,但没有任何帮助。 视频类 方法 我只是试着用@requestpart,并附上我如何请求的屏幕截图 错误为

  • 我想使用curl在控制器中一起传递json和文件。我在控制器中有以下方法。 下面是curl命令 使用JSON的Spring MVC多部分请求 这就是客户机如何将数据Paasting到服务器

  • 我尝试使用和通过Postman发送JSON和多个文件,但它不起作用。有可能在API中同时使用这两个注释吗?

  • 如何区分未发送的值和空值?如何检测客户端是否发送了空字段或跳过字段?

  • 我正在写一个简单的流媒体服务。 A浏览器A打开服务器的web套接字,然后另一个浏览器B打开同一服务器的新套接字。 浏览器A通过其摄像机(MediaRecorderAPI)注册视频并将其发送到服务器。 服务器将此视频广播到其他连接的浏览器。 我有一个使用套接字的工作版本。IO,但我希望使用普通JavaScript(Node.js服务器上的WebSocket.Server和客户端上的WebSocket

  • 问题内容: 我正在尝试在URL中传递路径参数和查询参数,但出现一个奇怪的错误。下面是代码 我的网址正在变成 我应该怎么做才能使其正常工作。我期望参数可以将id添加到网址中 请提出建议。提前致谢 问题答案: 我将使用from 来传递所有类型的URI参数。 例如:

  • 我想将json对象发送到服务器,并将其改装为RequestBody 这是我的改装对象 这是我的改造界面: 并创建RequestBody,如下所示: 但此请求将json作为字符串而不是json对象发送 那么我如何以jsonObejct的形式发送呢? 注意:如果我使用@Body作为json对象发送,但在中,我不能将@Body与@MultiPart一起使用!

  • 问题内容: 我使用上面的node.js代码发送了一个html文件。为了获得格式化的html文件,我需要发送另一个CSS文件(style.css)。 我的问题是:如何使用sendFile()发送这两个文件(index.html和style.css)并将它们集成到客户端? 问题答案: 浏览器应自行加载,因此您可以将其用作路由: 但是,随着您添加更多文件,这将变得非常麻烦。Express提供了一种内置的