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

Unity向SpringBoot Rest接口发送JSON时出现解析异常求助

解决Unity向SpringBoot发送JSON时的解析异常问题

嘿,这个错误我太熟了!你看到的HttpMessageNotReadableException里提到的'%'字符,基本上就是请求体被URL编码了,或者请求头没配置对,导致SpringBoot根本没法正确识别你发的是JSON数据。咱们一步步来排查解决:

1. 先把Unity的请求头改对

这是最常见的坑!你在Unity发POST请求的时候,一定要给请求加上Content-Type: application/json的头。如果没加这个,SpringBoot会默认把请求体当成普通表单数据处理,甚至自动给你做URL编码,自然会出现'%'这种编码字符。

给你贴个UnityWebRequest的正确示例:

// 假设你已经把用户数据转成了合法的JSON字符串
string userJson = JsonUtility.ToJson(userData);
UnityWebRequest request = new UnityWebRequest("http://你的SpringBoot地址/api/user", "POST");

// 把JSON转成字节数组,直接上传原始数据
byte[] jsonBytes = Encoding.UTF8.GetBytes(userJson);
request.uploadHandler = new UploadHandlerRaw(jsonBytes);
request.downloadHandler = new DownloadHandlerBuffer();

// 关键!一定要加这个请求头
request.SetRequestHeader("Content-Type", "application/json");

yield return request.SendWebRequest();

// 后续处理响应...

2. 别手动给JSON做URL编码

如果你之前为了“避免特殊字符”,用了WWW.EscapeURL或者类似方法给JSON字符串做编码,赶紧删掉!SpringBoot要的是原始的JSON格式,编码后的JSON会把{}变成%7B%7D,自然会触发解析错误。

举个错误示范,千万别这么写:

// 错误!不要编码JSON
string badJson = WWW.EscapeURL(userJson);

3. 检查SpringBoot的接口写法

确保你的接口方法是用@RequestBody来接收JSON的,而不是@RequestParam这种表单参数注解。比如:

@RestController
@RequestMapping("/api")
public class UserController {
    @PostMapping("/user")
    public ResponseEntity<String> receiveUserData(@RequestBody UserEntity user) {
        // 处理用户数据
        return ResponseEntity.ok("接收成功");
    }
}

这里的UserEntity要和Unity发送的JSON字段对应上,大小写不匹配的话可以用@JsonProperty注解指定映射,比如Unity里的userName对应Java里的userName或者用@JsonProperty("userName")标注字段。

4. 验证JSON本身的合法性

最后再确认下Unity生成的JSON是不是合法的——把生成的JSON字符串打印出来,复制到随便一个JSON校验工具(本地就能弄,比如用VSCode的JSON校验)看看有没有语法错误,比如缺引号、逗号多打了之类的。有时候格式错误也会导致解析失败,只是错误提示刚好指向了编码后的字符。

如果还是搞不定,可以抓个包看看实际发送的请求体内容,确认是不是真的发了原始JSON,而不是一堆带'%'的编码字符串。

内容的提问来源于stack exchange,提问作者Eshiett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:17:01