Flutter调用Spring Boot接口遇Connection failed问题求助
问题原因分析及解决方案
以下是导致Flutter调用Spring Boot接口失败的常见原因及对应解决办法:
localhost指向错误
移动端设备(包括模拟器)的localhost指代设备自身,而非你的开发电脑。如果Spring Boot服务运行在电脑上,移动端无法通过localhost访问该服务。- 解决:用电脑的局域网IP地址替换
localhost(可通过ipconfig(Windows)或ifconfig(Mac/Linux)查询),比如将请求地址改为http://192.168.1.100:8080/basic;安卓模拟器可使用10.0.2.2作为宿主机映射地址。
- 解决:用电脑的局域网IP地址替换
Android明文HTTP访问限制
Android 9(API 28)及以上版本默认禁止明文HTTP请求,仅允许HTTPS。你的接口使用HTTP协议,会被系统拦截。- 解决:
- 在
android/app/src/main/res/xml目录下创建network_security_config.xml文件,内容如下:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config> - 在
AndroidManifest.xml的<application>标签中添加配置:android:networkSecurityConfig="@xml/network_security_config"
- 在
- 解决:
电脑防火墙拦截
即使curl能本地访问接口,电脑防火墙可能阻止了局域网内其他设备访问8080端口。- 解决:检查电脑防火墙设置,允许8080端口的局域网入站请求;或更换Spring Boot服务端口后重启。
接口无响应体导致解析异常
你的Spring Boot接口返回类型为void,仅打印日志但不返回任何响应内容,可能导致Flutter端处理响应时出错。- 解决:修改接口返回具体响应内容,比如:
@GetMapping("basic") @ResponseBody public String basic2() { System.out.println("basic get invoked"); return "request success"; }
- 解决:修改接口返回具体响应内容,比如:
内容的提问来源于stack exchange,提问作者Adam Bodrogi
相关产品推荐
相关产品推荐

