springboot接口同时接收文件和json数据

在对接第三方接口时,遇到了一个问题:这个接口有时会传文件,有时会在body里传递json格式的参数,一开始我直接封装了个请求类,请求类里包含MultipartFile类型的文件参数,用于接收文件,这个没问题,测试也能接收到文件。

问题出现在后来,后来.......

后来他们增加了json格式的参数,有时会传递json参数,我以为这还不简单,原来的请求类里增加个参数,结果接收不到json参数。后来加了个@RequestBody 注解,后面跟这个请求类,但是加上后,就是悲剧的开始....

加上@RequestBody 注解后,重启项目,结果当接收文件时,直接报错了, 错误如下:HttpMediaTypeNotSupportedException

org.springframework.web.HttpMediaTypeNotSupportedException: 
Content type 'multipart/form-data;boundary=479380fd-fc76-48a6-ace2-3bee44beada4;charset=UTF-8' not supported,

大概意思就是文件用RequestBody注解接收时,不支持.......

后来我加了个参数,单独接收MultipartFile,

结果还是报错,HttpMediaTypeNotSupportedException

经过反复测试,我发现RequestBody和MultipartFile不能共存??但是很快就被自己测试推翻了,网上查询说是,需要用@RequestPart直接接收文件,@RequestPart接收json数据,但是我测试,根本就不行,接收不到json数据的.....

后来我单独拿出来一个参数接收jjson数据,因为目前json数据里只有一个参数userId,@RequestBody String userId,这么写居然可以接收到,然后,我又加上了请求类,用来接收文件,一测试,也可以接收到文件,心终于看到曙光了。。。。

后来认为是RequestBody注解不能用自己封装的类接收json,只能用String 类型,然后,自己再把String类型转为封装的类,就可以了 。

结论:接口同时接收文件和json参数时,RequestBody注解不要根自己封装的类,可以用String 类型接收json参数,然后自己再转化为自己的类。MelhatRequestDo类中有MultipartFile file接收文件参数。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-26 02:44:54       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-26 02:44:54       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-26 02:44:54       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-26 02:44:54       20 阅读

热门阅读

  1. 分享10个国内可以使用的GPT中文网站

    2024-05-26 02:44:54       9 阅读
  2. Effective C++(2)

    2024-05-26 02:44:54       8 阅读