You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:16:23