Spring MVC 请求头中 ContentType和DataType区别

一、Spring MVC 请求头中ContentType和DataType区别用途

1. dataType【通常在JQuery中使用】

  • 定义dataType 通常用于描述前端希望从服务器接收的数据格式。
  • 常见场景 :这是前端参数,通常在 jQuery.ajax 或其他前端框架中使用,告诉客户端如何解析服务器返回的数据。
  • 取值范围
    • json:期望接收到 JSON 格式数据。
    • xml:期望接收到 XML 格式数据。
    • html:期望接收到 HTML 文本。
    • text:期望接收到普通文本。
  • 作用
    • 决定客户端解析响应数据的方式。

    • 不会直接影响服务器的处理方式,而是客户端根据返回数据进行解析时的参考。

      $.ajax({
      url: '/api/getData',
      type: 'GET',
      dataType: 'json', // 告诉前端期望接收 JSON 格式
      success: function(data) {
      console.log(data);
      }
      });

2. contentType【Http请求和响应的内容类型】

  • 定义contentType 用于描述 HTTP 请求或响应的内容类型(MIME 类型)。
  • 常见场景
    • 在 HTTP 请求中,contentType 表示请求的正文格式。
    • 在 HTTP 响应中,contentType 表示服务器返回数据的格式。
  • 取值范围
    • 常见 MIME 类型:
      • application/json:表示 JSON 格式的数据。
      • application/xml:表示 XML 格式的数据。
      • text/html:表示 HTML 文本。
      • text/plain:表示普通文本。
      • multipart/form-data:表示文件上传表单格式。
  • 作用
    • 告诉服务器或客户端请求或响应的具体数据类型。
    • 决定了请求正文的解析方式(对于服务器来说)或内容展示方式(对于客户端来说)。
复制代码
  @PostMapping(value = "/submit", consumes = "application/json")
  public ResponseEntity<String> submit(@RequestBody MyObject obj) {
      // 处理 JSON 格式的请求体
      return ResponseEntity.ok("Success");
  }

  @GetMapping(value = "/data", produces = "application/json")
  public MyObject getData() {
      // 返回 JSON 格式的数据
      return new MyObject();
  }

二、SpringMVC @PostMapping@GetMapping 注解中 consumesproduces区别和用途

1. consumes 用途

  • 定义 :指定当前方法能够处理的 请求体Content-Type
  • 作用 :告诉 Spring MVC,这个方法只处理符合指定 Content-Type 的请求。如果请求的 Content-Type 不匹配,将返回 415 Unsupported Media Type 错误。
  • 常用场景
    • 用于 POST、PUT 或 PATCH 方法,这些方法通常需要处理请求体数据。
  • 取值
    • 通常指定为 MIME 类型,如:

      • application/json
      • application/xml
      • multipart/form-data(文件上传)

      @PostMapping(value = "/submit", consumes = "application/json")
      public ResponseEntity submit(@RequestBody MyObject obj) {
      // 只能处理 Content-Type 为 application/json 的请求体
      return ResponseEntity.ok("Success");
      }

如果请求中不包含 Content-TypeContent-Type 不为 application/json,Spring MVC 会拒绝处理请求。

2. produces 用途

  • 定义 :指定当前方法返回的 响应体Content-Type
  • 作用 :告诉客户端,响应的媒体类型是什么。如果客户端无法接受该媒体类型(通过请求头中的 Accept 指定),可能会返回 406 Not Acceptable 错误。
  • 常用场景
    • 用于 GET 或其他返回数据的请求方法。
  • 取值
    • 通常指定为 MIME 类型,如:

      • application/json
      • application/xml
      • text/html

      @GetMapping(value = "/data", produces = "application/json")
      public MyObject getData() {
      // 返回的响应体会被设置为 Content-Type: application/json
      return new MyObject();
      }

如果客户端的 Accept 请求头中不包含 application/json,Spring MVC 可能会拒绝处理并返回 406 错误。

核心区别

属性 consumes produces
定义 请求的 Content-Type 响应的 Content-Type
适用场景 限制服务器能够接受的请求内容类型 限制服务器能够生成的响应内容类型
取值来源 对应请求头中的 Content-Type 对应请求头中的 Accept
错误响应 如果请求的 Content-Type 不匹配,返回 415 错误 如果请求的 Accept 不匹配,返回 406 错误
常用注解 @PostMapping@PutMapping @GetMapping@RequestMapping

总结

POST 请求可以使用 @PostMapping 中的 consumes 属性来限制接受的 请求内容类型 (Content-Type),当客户端发送的请求 Content-Type 不符合指定类型时,Spring 会返回 415 Unsupported Media Type 错误。

相关推荐
2601_963749101 小时前
越华环保集团数字化污水治理:端边云采集架构与平台对接实现
java·大数据·架构
xcLeigh1 小时前
Go入门:整数类型的溢出与安全边界
java·安全·golang
源码宝2 小时前
SpringBoot+Vue2 诊所门诊管理系统,完整前后端源码,可直接部署上线
java·源码·his系统·门诊系统·程序代码·诊所系统·门诊his
yychen_java2 小时前
九:Text-to-SQL 智能数据查询与 Human-in-the-Loop 人机协作
java·人工智能·架构
user_admin_god2 小时前
数据采集/交换系统设计经验
spring boot·spring·策略模式
lhldsg3 小时前
智慧场馆解决方案小程序开发实战:从架构设计到部署指南
java·小程序·uni-app
Freak嵌入式3 小时前
Pico UART 数据收发实战:硬件配置、MicroPython 编程
java·开发语言·单片机·嵌入式硬件·生活
devilnumber4 小时前
Oracle 与 MySQL substr 函数差异总结
java·数据库·mysql·oracle
cfm_29144 小时前
线程池阻塞队列
java·开发语言
学代码的CJY4 小时前
Linux 重定向、管道与环境变量
linux·spring boot·spring