我想发送一个对象到控制器,它有几个文件列表和几个纯文本字段。
public class ContributionNew<T extends MovieInfoDTO> {
private List<T> elementsToAdd;
private Map<Long, T> elementsToUpdate;
private Set<Long> idsToDelete;
private Set<String> sources;
private String comment;
}
public class Photo extends MovieInfoDTO {
private MultipartFile photo;
}
@PostMapping(value = "/{id}/contributions/photos")
@ResponseStatus(HttpStatus.CREATED)
public
ResponseEntity<Void> createPhotoContribution(
@ApiParam(value = "The movie ID", required = true)
@PathVariable("id") final Long id,
@ApiParam(value = "The contribution", required = true)
@RequestBody @Valid final ContributionNew<Photo> contribution
) {
我正在使用postman发送数据。但是,他将我丢弃
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundarywY7ByvgonAjDoaCT;charset=UTF-8' not supported
我应该为这个控制器设置什么内容类型,这样我就可以发送一个包含纯文本字段和文件列表的对象?
如果我在页眉中设置页眉
Content-type: multipart/form-data; charset=utf-8
它把我扔到控制台里
org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
9条答案
按热度按时间laik7k3q1#
正如dknight @RequestBody表示使用JSON或XML数据Map您的DTO bean。在MultipartFile的情况下,您不能使用JSON数据,因此您不能使用@RequestBody。请尝试使用@ModelAttribute注解。
工作样品:
使用这样的PromoterDTO:
wnvonmuf2#
在Postman中,您需要将主体类型设置为raw,并从下拉列表中选择JSON,我也遇到过类似的问题,这解决了我的问题。
nxagd54h3#
请使用
@RequestParam
而不是@RequestBody
!chy5wohz4#
使用@ModelAttribute而不是@ResponseBody,因为这会占用键值对中的数据,而后者用于对象(如json)。在访问api时,只需传递对象的multipart类型和json键值对。它工作正常!
stack overflow question on this
olhwl3o25#
使用@ModelAttribute代替@RequestBody,如下所示:
krcsximq6#
使用
@ModelAttribute
而不是@RequestBody
。它对我很有效。6yt4nkrj7#
必须在控制器中写入produces = {“application/json”}而不是consuments = {“application/json”}
vwoqyblh8#
Hi Folks只需更改:@请求正文到@模型属性
快乐编码。
t40tm48m9#
下面是使用Sping Boot 2.1.7用Kotlin编写的完整代码示例
示例使用了一个
ProfileRepository
,当然,您可以实现它。Kotlin很好,因为
data class
已经实现了可序列化。请注意,您必须对模型对象属性使用
var
,而不是val
,否则日志消息中的字段值将为空。