最近碰到一个更新用户个人头像的需求,允许用户选择APP内置的几张示例图片作为头像,也允许用户拍照上传个人头像(不论是选择示例图片作为个人头像还是用户自己拍照作为个人头像,均会在文件字段之外再传其他参数,比如图片名,不只是一个文件字段)。计划中的接口是一个,拍照上传头像是由iOS和android开发在壳的层面上负责完成的,选择示例图片作为用户个人头像是在React Native层面予以实现的。因为是同一个接口,出于统一的目的,请求头中的Content-Type都使用“multipart/form-data; boundary=分隔符“这样的值(比如:Content-Type: multipart/form-data; boundary=”bac9aebd-d9ff-40ef-bcf3-4fffdd1b2c00″)。壳发的上传图片请求能正常地被服务器端处理,但是RN发的文件为空的请求就没法正常被处理,只知道报错信息为:400 bad request: Required request part ‘file’ is not present,跟后端交涉后被告知以前没有处理过不传文件的情况,还说他们写的是中间件,请求进不了断点的话他们也处理不了。。。
然而Spring、Tomcat这些东西毕竟不是才出来的新生事物,肯定不会有这么致命的问题在的。。。
结合看完即忘的一点java印象,在网上查了下资料,最后觉得可定是通过注解RequestParam来取参时出了问题(当然,因为没看过后端代码,全是猜的)。根据Spring官方文档https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html猜测通过@RequestParam(value = “file”, required = false)这种方式来取参的话,file字段就是可选的了。
第二天一上班就来找后端同事让他试试,后面不知道他们是不是通过这种方式解决这个问题的,反正最后请求可以进后端的断点了。That’s enough.
你真是太棒了,因为你的这篇博客我也修复了同样的问题。
客气客气