表单数据

  • 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数据据