Data Type Request Process
表单数据 - application/x-www-form-urlencoded : enctype未指定属性时的默认值 - multipart/form-data :当表单包含 type=file 的 input元素时使用此值 - text/plain :出现于 HTML5,用于调试。这个值可被 button、input type="submit" 或 input type = "image"元素上的 formen…
表单数据
- application/x-www-form-urlencoded : enctype未指定属性时的默认值
multipart/form-data:当表单包含type=file的 input元素时使用此值text/plain:出现于 HTML5,用于调试。这个值可被 button、input type=“submit” 或 input type = “image”元素上的formenctype属性覆盖- 纯文本内容传输
- 自定义数据传输格式
- 跨域请求时的预检请求(CORS preflight)
处理方式
application/x-www-form-urlencoded :
- 在 JavaEE 中,可以使用
HttpServletRequest.getParameter()方法来获取application/x-www-form-urlencoded类型的数据 - Spring 中,可以使用
@RequestParam注解来接收application/x-www-form-urlencoded类型的数据。
multipart/form-data :
- JavaEE 并没有提供直接处理
multipart/form-data的方法,但可以使用第三方库来处理,比如 Apache Commons FileUpload 或 Servlet 3.0 的@MultipartConfig注解。 - Spring 提供了更便捷的方式处理
multipart/form-data类型的数据,通过使用@RequestPart或@RequestParam注解来接收上传的文件或数据
例子
@WebServlet("/upload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
for (Part part : request.getParts()) {
// 处理上传的文件或其他数据
}
}
}
// 在这个例子中,@MultipartConfig 注解启用了文件上传的支持,并使用 request.getParts() 来获取上传的各个部分数据。
@RestController
public class FileUploadController {
@PostMapping("/upload")
public ResponseEntity<String> handleFileUpload(@RequestPart("file") MultipartFile file) {
// 处理上传的文件
return ResponseEntity.ok("File uploaded successfully");
}
}
// 在 Spring 中,MultipartFile 是用来表示上传文件的对象,通过 @RequestPart 注解将上传的文件映射到方法参数中。
text/plain:
- JavaEE 使用
request.getReader()获取请求体的读取器,然后读取并拼接文本数据。 - 在 Spring 中,你可以使用
@RequestBody注解来接收text/plain类型的数据
例子
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedReader reader = request.getReader();
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
String plainTextData = stringBuilder.toString();
// 处理 plainTextData 中的文本数据
}
@RestController
public class PlainTextController {
@PostMapping("/plainTextEndpoint")
public ResponseEntity<String> handlePlainText(@RequestBody String plainTextData) {
// 处理 plainTextData 中的文本数据
return ResponseEntity.ok("Received plain text data");
}
}
JSON
前端可以通过 JavaScript 的 JSON.stringify() 方法将数据转换为 JSON 格式发送给后端
处理方式
- 在 Spring 中,通常使用
@RequestBody注解来处理 JSON 数据 - 在 JavaEE 中,使用外部库比如Jackson等来处理Json数据,类似处理text/plain,用外部库将在请求体读取到的JSON转换为实例对象
查询参数
Query Parameters(查询参数): 这些参数通常附加在 URL 的末尾,以键值对的形式出现(例如 ?key1=value1&key2=value2)
处理方式
- JavaEE : 可以使用
HttpServletRequest.getParameter()方法来获取 - Spring : 可以使用
@RequestParam("paramName")注解来获取查询参数
HTTP Header
处理方式
- JavaEE : 可以使用
HttpServletRequest.getHeader()方法来获取 - Spring : 可以使用
@RequestHeader("headerName")注解来获取Http Header数据据