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

我想使用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如何一起发送@Requestbody和@Requestpart 的全部内容, 来源链接: utcz.com/qa/436217.html

回到顶部