当前位置: 首页> 汽车> 车展 > 东莞市优镨网络技术有限公司_企业内部网页设计_aso推广公司_网络营销学院

东莞市优镨网络技术有限公司_企业内部网页设计_aso推广公司_网络营销学院

时间:2025/7/11 7:40:14来源:https://blog.csdn.net/CharmaineXia/article/details/142846849 浏览次数: 0次
东莞市优镨网络技术有限公司_企业内部网页设计_aso推广公司_网络营销学院

  使用RestTemplate发送http请求,发现报错400 Bad Request,其实这是个很基础的问题,一般都能绕过去,像我这样直接复制代码才有可能发生这样的错误情况。

  先上原码:

    @AutowiredRestTemplate restTemplate;public boolean alarm(String url,String body) {if (body == null || url == null) {return false;}try {HttpHeaders httpHeaders = new HttpHeaders();httpHeaders.add(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString());HttpEntity<String> entity = new HttpEntity<>(body, httpHeaders);FeishuAlarmResp result = restTemplate.postForObject(url, entity, FeishuAlarmResp.class);if (result == null || result.getStatusCode() == null || result.getStatusCode() != 0) {log.error("http发送失败>>>>>>result={} message={}",JSON.toJSONString(result),body);return false;}} catch (Throwable t) {log.error("http发送异常:url:" + url + ",body:" + body, t);return false;}return true;}

直接报错:
org.springframework.web.client.HttpClientErrorException: 400 Bad Request


问题所在:

  不能直接使用 @Autowired 自动注入 RestTemplate 使用。因为,官网文档有写:

Since RestTemplate instances often need to be customized before being used, Spring Boot does not provide any single auto-configured RestTemplate bean.
(由于RestTemplate实例在使用前通常需要定制,Spring Boot不提供任何单个自动配置的RestTemplate bean。)


解决办法:

  自定义RestTemplate的Bean对象,重点是要用restTemplateBuilder.build()来创建对象。

方法1:

@Autowired
private RestTemplateBuilder restTemplateBuilder;
@Autowired
private RestTemplate restTemplate;
@Bean
public RestTemplate getRestTemplate() {return restTemplateBuilder.build();
}//调用方式:
String baiduHtml = restTemplate.getForObject("https://www.baidu.com", String.class);
System.out.println(baiduHtml);

方法2:写个config类

  然后就可以用 @Autowired 自动注入 RestTemplate 使用了。

@Component
public class RestTemplateConfig {/*** RestTemplate* @return RestTemplate*/@Beanpublic RestTemplate restTemplate() {return getRestTemplate();}/*** 获取自定义 RestTemplate* @return RestTemplate*/private RestTemplate getRestTemplate() {RestTemplate restTemplate = new RestTemplateBuilder().setConnectTimeout(5 * 1000).setReadTimeout(60 * 1000).build();// 为避免汉字变成问号,将String转换器编码格式置为 UTF-8restTemplate.getMessageConverters().forEach(converter -> {if (converter instanceof StringHttpMessageConverter) {((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);}});return restTemplate;}
}
关键字:东莞市优镨网络技术有限公司_企业内部网页设计_aso推广公司_网络营销学院

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: