controller参数为实体对象和file时报错

介绍

今天写了一个controller,里面有两个参数,包括一个对象和一个MultipartFile对象。如下:

    @PostMapping("/upload")
    public AjaxResult upload(@RequestBody UploadFileRequest uploadFileRequest, MultipartFile file) {
        photoService.upload(uploadFileRequest, file);
        return success();
    }

此时,接收前端请求时,会报错

17:28:37.135 [http-nio-8080-exec-1] ERROR c.a.m.c.e.h.GlobalExceptionHandlerBak - [extraExceptionHandler,223] - Content type 'multipart/form-data;boundary=--------------------------247732641106874960457027;charset=UTF-8' not supported
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=--------------------------247732641106874960457027;charset=UTF-8' not supported
	at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:211)
	at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160)
	at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133)
	at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)
	at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146)

原因

前端在走接口上传文件的同时会将请求header的content-type设置为:multipart/form-data, 或者form表单提交的时候将enctype设置为"multipart/form-data" 。

后端收到请求时由于请求体有@RequestBody 注解标识,通常会用application/json, application/xml处理content-type,此时会报编码格式的问题。

解决方式

MultipartFile这样的multipart/form-data媒体类型优先级会高于application/json,而配置@RequestBody 感觉使用一个低优先级的handle一个高优先级的从而报错。所以在multipart/form-data媒体类型请求时将@RequestBody去掉就可以了。

参考: controller接收参数为实体对象跟MultipartFile对象报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Honey Ro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值