如果请求体不是JSON格式,UserController层会怎样?
在后端接口设计中,若请求体格式不符合预期(如非JSON格式),会导致以下常见问题:
1. 数据解析失败
当接口使用@RequestBody
注解且期望JSON格式时,若客户端发送表单格式(application/x-www-form-urlencoded
)或其他非JSON格式,Spring会抛出HttpMessageNotReadableException
错误,返回400状态码3。这种情况下,服务端日志通常会提示类似"JSON parse error"的异常信息。
2. 参数格式差异
不同请求体格式对数据结构有不同要求:
- 表单格式:数据以
key1=value1&key2=value2
形式编码,适用于简单键值对传输2 - JSON格式:支持复杂嵌套结构,如
{"user": {"name": "张三", "age": 25}}
2
3. 编码问题隐患
特殊字符(如中文、空格)在不同格式中编码方式不同:
- 表单格式自动进行URL编码(如空格转为
%20
)1 - JSON格式要求严格遵循UTF-8编码规范,特殊字符需使用Unicode转义2
常见解决方案
- 前端适配:明确设置请求头
Content-Type
(如application/json
),并按格式序列化数据2 - 后端调整:
javaCopy Code
@PostMapping("/form")
-
或使用统一解析器配置,支持多种数据格式public ResponseEntity<?> handleForm(@RequestParam String name, @RequestParam String gender) { // 处理表单格式参数 }
验证手段
可通过工具(Postman)发送不同格式请求体,观察响应状态码和错误信息。例如错误请求示例:
httpCopy Code
POST /api/users HTTP/1.1
Content-Type: application/x-www-form-urlencoded
name=张三&gender=male
当后端接口期望JSON时,该请求会触发400错误