通常,没有声明,默认application/x-www-form-urlencoded
application/x-www-form-urlencoded form表单默认的数据格式,提交的数据形式 key1=val1&key2=val2(参数少)
multiple/form-data 一般用来上传文件,也可以上传普通数据
application/json json对象(参数多)
post请求postman的几种参数格式区别:
form-data对应的是以form表单提交传值的情形,等价于http请求中的multipart/form-data
x-www-form-urlencoded即application/x-www-from-urlencoded,将表单内的数据转换为Key-Value;
raw对应的是入参是任意格式的可以上传任意格式的【文本】,可以上传text、json、xml、html等,使用较少;
binary相当于Content-Type:application/octet-stream,只可以上传二进制数据,通常用来上传文件,但是一次只能上传一个文件;
毫无前端基础的开发人员,独立完成页面开发,排查问题,困难重重!摸索虽然浪费时间,无法按时完成任务,但这些坑终究是要自己去踩的!不够了解contentType,不清楚传payload数据是啥,也不清楚web页面inspect的使用!经过几天不懈努力完成相关页面设计。交互的问题又来了,这不使用网上的开源代码,自己在家里琢磨,倒腾出来的东西,在公司再验证,遇到了HttpServletRequest无法解析上传的文件,目前没时间去处理。ssh项目架构历史悠久,需要学习的东西居多,工作任务也不轻,忙完前端忙后端。。。
言归正传,问题排查思路。
百度之后,发现是传的参数与后端接口定义的RequestParam的key对应不上。
无外乎:请求参数key一定出错了,或者标签里的name没有填写
@RequestMapping(value = "/user/employ/info/upload", method = RequestMethod.POST)
@ResponseBody
public void uploadUserCdAndHm(@RequestParam("cifNo") String cifNo,@RequestParam("name") String name,@RequestParam("employerNo") String employerNo,@RequestParam("type") String type,@RequestParam("permitNo") String permitNo,@RequestParam("permitStart") String permitStart,@RequestParam("permitEnd") String permitEnd,@RequestParam("tpFace") MultipartFile feFaceFile,@RequestParam("tpBack") MultipartFile feBackFile,@RequestParam("employerCredential") MultipartFile biz,HttpSession session, HttpServletRequest request) throws Exception, ApplicationException {System.err.println("feFaceFile:" + feFaceFile.getSize());System.err.println("feBackFile:" + feBackFile.getSize());System.err.println("biz:" + biz.getSize());System.err.println("cifNo:" + cifNo);// 其他的就不展示了}
错误之处
将tbFace改成tpFace即可!问题就处理啦!
formdata
上传文件,不进行页面跳转(ajax)。上传文件中间出现,请求方式一致、url漏了后缀报错405!
post 请求,formdata,报错400,请求参数与接口定义的名称不一致!