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

原因如下:

  1. 前端上传表单没设置 enctype="multipart/form-data"
  • 如果你用的是 <form> 提交,必须加上:
1
2
3
4
<form method="POST" enctype="multipart/form-data">
<input type="file" name="file" />
<!-- 其他参数 -->
</form>

  1. 使用 Ajax/Fetch 上传时,没用 FormData 对象
  • 用 JS 上传文件时,必须使用 FormData 对象,并且不能手动设置 Content-Type,浏览器会自动加。
1
2
3
4
5
6
7
8
9
10
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('term', '2');
formData.append('id', 'xxx');

fetch('/upload', {
method: 'POST',
body: formData
// 不要手动设置 headers 的 Content-Type
});

  1. 后台接口没有正确解析 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
2
3
4
5
6
7
8
9
----WebKitFormBoundaryxxxxxx---

content-Disposition: form-data; name="parm"



math

----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 接收;或者反之。

解决方法

==>修改请求体