一、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
表示服务器返回数据的格式。
- 在 HTTP 请求中,
- 取值范围 :
- 常见 MIME 类型:
application/json
:表示 JSON 格式的数据。application/xml
:表示 XML 格式的数据。text/html
:表示 HTML 文本。text/plain
:表示普通文本。multipart/form-data
:表示文件上传表单格式。
- 常见 MIME 类型:
- 作用 :
- 告诉服务器或客户端请求或响应的具体数据类型。
- 决定了请求正文的解析方式(对于服务器来说)或内容展示方式(对于客户端来说)。
@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();
}
二、Spring
MVC @PostMapping
和 @GetMapping
注解中 consumes
和 produces
区别和用途
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<String> submit(@RequestBody MyObject obj) {
// 只能处理 Content-Type 为 application/json 的请求体
return ResponseEntity.ok("Success");
}
-
如果请求中不包含 Content-Type
或 Content-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 错误。