使用IntelliJ IDEA实现Spring REST消费指南时遇UnknownHostException但网址可访问
解决Spring消费REST服务时的UnknownHostException问题
嘿,我之前跟着Spring的REST消费指南做的时候也碰到过一模一样的问题!虽然浏览器能正常访问目标地址,但Java程序就是抛出UnknownHostException,这大概率是DNS解析或网络配置差异导致的,给你几个实用的排查和解决方向:
指定JVM的DNS服务器
有时候Java虚拟机使用的DNS和浏览器/系统不一样,你可以在IDEA的运行配置里手动指定公共DNS(比如谷歌的8.8.8.8):- 点击IDEA顶部的
Run->Edit Configurations - 找到你的Application运行配置,在
VM options输入框中添加:-Ddns.server=8.8.8.8
保存后重新运行程序试试。
- 点击IDEA顶部的
检查代理配置
如果你的机器使用了代理服务器,浏览器可能已经配置了代理,但Java程序默认不会继承这些设置:- 如果需要代理,在VM参数中添加代理信息(替换成你的代理地址和端口):
-Dhttp.proxyHost=你的代理地址 -Dhttp.proxyPort=代理端口 -Dhttps.proxyHost=你的代理地址 -Dhttps.proxyPort=代理端口 - 如果不需要代理,可以强制关闭系统代理:
-Djava.net.useSystemProxies=false
- 如果需要代理,在VM参数中添加代理信息(替换成你的代理地址和端口):
刷新本地DNS缓存
本地DNS缓存可能过期或出错,尝试清空缓存:- Windows:打开命令提示符,运行
ipconfig /flushdns - Mac:打开终端,运行
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - Linux(Ubuntu为例):运行
sudo systemd-resolve --flush-caches
- Windows:打开命令提示符,运行
测试Java的DNS解析能力
写个极简的测试类,单独验证Java能不能解析目标域名:import java.net.InetAddress; public class DnsTest { public static void main(String[] args) { try { InetAddress address = InetAddress.getByName("gturnquist-quoters.cfapps.io"); System.out.println("解析到的IP地址: " + address.getHostAddress()); } catch (Exception e) { e.printStackTrace(); } } }如果这个测试类也抛出
UnknownHostException,说明问题出在Java环境的网络配置,和Spring代码无关。排查防火墙/安全软件
有些防火墙或杀毒软件会拦截Java程序的网络请求,试试临时关闭这类软件,再重新运行你的Spring应用,看是否能解决问题。
内容的提问来源于stack exchange,提问作者Space Cadet
相关产品推荐
相关产品推荐

