如何在春天送@RequestBody和@Requestpart在一起(How to send @Re

2019-10-29 22:53发布

我想通过JSON和使用curl控制器文件一起。 我有以下的控制器方法。

@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的JSON放在一个文件中,并使用文件中的curl命令它的工作原理。 但我不希望使用文件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) {
}

我试图解决在这个环节上给出,但还是同样的问题

Spring MVC的multipart请求信息使用JSON

这是客户端如何paasing数据到服务器

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
})

Answer 1:

我通过配置实现multipartresolver解决的问题。

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


文章来源: How to send @Requestbody and @Requestpart together in spring