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

使用Spring RestTemplate发起GET请求访问网站报错排查

报错核心原因

你的代码存在几个逻辑错误直接导致响应解析失败:

  • 替换了RestTemplate默认的全部消息转换器,仅保留用于JSON序列化/反序列化的MappingJackson2HttpMessageConverter,这个组件无法解析text/html类型的文本响应,是报错的直接原因
  • 给无请求体的GET请求强行设置了application/x-www-form-urlencoded表单类型的Content-Type头,该头仅适用于带表单请求体的POST等请求方法,属于无效配置,部分站点会直接拦截这类不符合规范的请求
  • 构造GET请求的HttpEntity时传入空的MultiValueMap请求体,属于冗余逻辑
最简可用实现

不需要额外配置转换器、请求头的场景下,几行代码就能实现GET请求拉取网页内容:

// 用默认构造方法初始化,自带支持解析文本响应的StringHttpMessageConverter
RestTemplate restTemplate = new RestTemplate();
// 直接发起GET请求,响应自动映射为String类型
ResponseEntity<String> response = restTemplate.getForEntity("https://www.google.com", String.class);
// 拿到网页HTML内容
String html = response.getBody();
自定义请求头的实现

如果需要加User-Agent等头避免被站点拦截,参考如下写法:

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
// 按需添加请求头,不要给GET请求设表单类型Content-Type
headers.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36");
// GET请求无请求体,泛型用Void即可
HttpEntity<Void> requestEntity = new HttpEntity<>(headers);

ResponseEntity<String> response = restTemplate.exchange(
        "https://www.google.com",
        HttpMethod.GET,
        requestEntity,
        String.class
);
String html = response.getBody();
原代码修正方案

如果你确实需要自定义消息转换器列表,不要只加Jackson转换器,必须把处理文本响应的转换器加上,修正后的核心配置如下:

List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
// 先加字符串响应转换器,指定UTF-8编码,支持解析text/html等文本类型
StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
messageConverters.add(stringConverter);
// 再加JSON转换器,不要给它设ALL媒体类型,仅处理JSON相关即可
MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
jacksonConverter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON_UTF8));
messageConverters.add(jacksonConverter);

restTemplate.setMessageConverters(messageConverters);

// 构造GET请求实体时去掉无效的表单Content-Type头,不要传空的MultiValueMap
HttpHeaders headers = new HttpHeaders();
HttpEntity<Void> entity = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange("https://www.google.com", HttpMethod.GET, entity, String.class);

注意:如果本地网络无法直接访问google.com,会报连接超时错误,和代码逻辑无关,需要自行解决网络连通性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:48:16