Spring Boot接收Form-data时JSON解析异常及责任划分求助
问题解决:Spring Boot form-data接收代码文本的Jackson解析错误
一、当前"Unexpected character"错误的解决步骤
1. 修正控制器参数绑定方式
如果接口是通过multipart/form-data接收请求,禁止使用@RequestBody注解——该注解仅用于解析application/json格式的请求体,若用它处理form-data,Spring会把整个multipart请求内容当成JSON解析,必然触发字符解析错误。
正确的参数绑定方式有两种:
- 用
@RequestParam逐个接收字段:
@PostMapping("/upload") public ResponseEntity<?> handleUpload( @RequestParam("content") String content, @RequestParam("title") String title, @RequestParam("file") MultipartFile file ) { // 业务处理逻辑 return ResponseEntity.ok().build(); }
- 用DTO类配合
@ModelAttribute批量绑定:
public class UploadDTO { private String content; private String title; private MultipartFile file; // 生成getter/setter方法 } @PostMapping("/upload") public ResponseEntity<?> handleUpload(@ModelAttribute UploadDTO dto) { // 业务处理逻辑 return ResponseEntity.ok().build(); }
2. 确保form-data中JSON字段的合法性
如果需要在form-data的某个字段里传递JSON格式字符串(而非直接用JSON请求体),客户端必须对该字符串做完全转义处理:
- 字符串中的换行符、双引号、反斜杠等特殊字符需转义为
\n、\"、\\格式 - 你提供的示例JSON中,
content字段的原始字符串包含未转义的换行,即便开启了allow-unquoted-control-chars,作为form-data字段传递时仍需保证整体是合法JSON字符串。
3. 补充Jackson宽松配置(可选)
若需兼容部分非严格JSON格式,可在application.yml中添加更多配置:
jackson: parser: allow-unquoted-control-chars: true allow-single-quotes: true allow-unquoted-field-names: true
二、JSON解析的责任划分
- 客户端责任:生成并发送结构合法的JSON数据(无论是作为请求体,还是form-data中的字段值),必须保证内容符合JSON语法规范,包括转义特殊字符、正确闭合引号和括号等。
- 服务端责任:解析客户端发送的合法JSON数据,可通过配置兼容部分非严格格式,但无义务修复客户端发送的完全不合法的JSON结构。
内容的提问来源于stack exchange,提问作者geon
相关产品推荐
相关产品推荐

