spring常见报错构造发包
前言
真是一个渗透半个开发
有时根据api直接构造请求包会报错500,不是发不了,只是可能请求头或请求体构造的不一样,已接触的报错记录如下:
Spring MVC、Spring Boot的文件上传报错记录
大致如下:
| 错误提示 | 常见原因 |
|---|---|
| not a multipart | 没用 multipart/form-data |
| no boundary | 自己写 Content-Type 没有 boundary |
| required param missing | 必填参数没传 |
| file too big | 超出上传限制 |
| method not supported | 请求方法错 |
| parse body failed | 格式不一致 |
| missing part | FormData 里漏了某个字段 |
关键字==>not a multipart
通常出现于文件上传
详细报错大致如下:
1 | current request is not a multipart request |
解决方法
==>Content-Type:multipart/form-data
原因如下:
- 前端上传表单没设置
enctype="multipart/form-data"
- 如果你用的是
<form>提交,必须加上:
1 | <form method="POST" enctype="multipart/form-data"> |
- 使用 Ajax/Fetch 上传时,没用 FormData 对象
- 用 JS 上传文件时,必须使用
FormData对象,并且不能手动设置Content-Type,浏览器会自动加。
1 | const formData = new FormData(); |
- 后台接口没有正确解析 multipart 请求
- 例如在 Spring Boot 中,需要用
@RequestParam MultipartFile file来接收文件。 - 还需要确保依赖(如 Commons FileUpload)已导入并且 Multipart 解析已开启。
注意:
后续可能还会报错说你缺乏什么参数,例如:
1 | The request was rejected because no multipart boundary was found |
解决方法:
类型后面直接跟参数即可
例如:
Content-Type: multipart/form-data; boundary=—-WebKitFormBoundaryxxxxxx
请求体注意同样,我的建议是直接在同一个网址下找到另外一个文件上传,直接copy过来,或者找到对应的js,直接本地部署一下,实话说能不猜就别猜
关键字==>is not present
全称
1 | required string parameter 'xxx' is not present |
意思是少了一个参数,直接把xxx接在url后面就行了
解决方法
==>?param=&xxx=
==>form-data;name=”parm”
第二中方法适用于上传多参数:
1 | ----WebKitFormBoundaryxxxxxx--- |
关键字==>Failed to parse
全称
1 | Failed to parse multipart servlet request |
意思是文件过大了
解决方法
==>减少内容
关键字==>”xxx” not supported
全称
1 | Request method 'POST' not supported |
意思是不支持post
解决方法
==>”POST”==>”GET”
关键字==>request body
全称
1 | Could not parse request body |
前端发的是 JSON,但后端没用 @RequestBody 接收;或者反之。