Swagger CodeGen生成的Mock API调用时JSON解析报错:Unexpected character {
问题分析与解决方案
可能的原因及对应解决办法
1. Shell环境下的JSON转义问题
你在curl命令中使用\"转义双引号,但不同Shell(如Windows CMD、Linux Bash)对转义字符的处理逻辑不同,可能导致实际发送的JSON格式被破坏,触发解析错误。
- 解决办法:
- 若使用Linux/macOS的Bash环境,直接用单引号包裹JSON内容,无需转义双引号:
curl -X POST "http://localhost:50352/MyService-end-point" -H "accept: application/json" -H "Content-Type: application/json" -d '{"employee":{"name":"sonoo","salary":56000,"married":true}}' - 若使用Windows CMD环境,改用双引号包裹JSON,内部双引号用
""转义:curl -X POST "http://localhost:50352/MyService-end-point" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"\"employee\"\":{\"\"name\"\":\"\"sonoo\"\",\"\"salary\"\":56000,\"\"married\"\":true}}" - 更稳妥的方式是把JSON写入文件(如
request.json),用@符号引用文件发送:curl -X POST "http://localhost:50352/MyService-end-point" -H "accept: application/json" -H "Content-Type: application/json" -d @request.jsonrequest.json内容:{"employee":{"name":"sonoo","salary":56000,"married":true}}
- 若使用Linux/macOS的Bash环境,直接用单引号包裹JSON内容,无需转义双引号:
2. Mock服务期望的请求体格式不匹配
Swagger CodeGen生成的Mock服务可能期望直接传入employee对象,而非嵌套在employee字段中的结构——比如API定义的请求体就是Employee类型,而非包含该字段的外层对象。
- 解决办法:
核对Swagger API定义的请求体结构,若确实要求直接传入employee对象,修改请求JSON为:
对应的Bash环境curl命令:{"name":"sonoo","salary":56000,"married":true}curl -X POST "http://localhost:50352/MyService-end-point" -H "accept: application/json" -H "Content-Type: application/json" -d '{"name":"sonoo","salary":56000,"married":true}'
3. 请求头验证
虽然你指定了Content-Type: application/json,需确认Mock服务是否正确识别该头。可先用PostMan发送相同JSON请求,对比curl的请求头是否一致,排除头信息异常问题。
验证手段
- 先用PostMan直接发送JSON请求,确认Mock服务能正常响应,排除服务本身的问题。
- 开启curl的
-v参数查看实际发送的请求内容,确认JSON格式是否正确:curl -v -X POST "http://localhost:50352/MyService-end-point" -H "accept: application/json" -H "Content-Type: application/json" -d '{"employee":{"name":"sonoo","salary":56000,"married":true}}'
内容的提问来源于stack exchange,提问作者Nigel Tunnicliffe
相关产品推荐
相关产品推荐

