在对接第三方接口时,遇到了一个问题:这个接口有时会传文件,有时会在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接收文件参数。