@Component
public class HttpUtil {
private static Logger logger = LoggerFactory.getLogger(HttpUtil.class);
@Resource
private RestTemplate restTemplate;
private static HttpUtil httpUtil;
@PostConstruct
public void init(){
httpUtil = this;
httpUtil.restTemplate = this.restTemplate;
public static <T> String httpRequest(String url, HttpMethod method, HttpEntity<T> entity){
try {
ResponseEntity<String> result = httpUtil.restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
return result.getBody();
} catch (Exception e) {
logger.error("请求失败: " + e.getMessage());
return null;
这个时候我们就需要维护一个工具类的静态实例,初始化的时候把restTemplate传进来,这样就可以直接调用HttpUtil.httpRequest()方法。
最后编写controller类,用我们的exchange方法远程调用,就能获取到结果了。一般来说,拿到的结果是一个json类型,我们还需要通过fastjson,Jackson等来处理我们的json字符串,获取到我们想要的数据。
RestTemplate是什么RestTemple是Spring提供的用于访问Http请求的客户端,RestTemple提供了多种简洁的远程访问服务的方法,省去了很多无用的代码。为什么要用RestTemplate相信大家之前都用过apache的HTTPClient类,逻辑繁琐,代码复杂,还要自己编写使用类HttpClientUtil,封装对应的post,get,delete等方法。Rest...
可用于园艺,小型房屋停车等的站点数据库
添加后院记录
L x W agriok现有宜居现有固定器uppertinhouseok buildok后院入口宽度shareproduce共享服务费描述
在x匹配查询中
RestTemplate是什么
RestTemple是Spring提供的用于访问Http请求的客户端,RestTemple提供了多种简洁的远程访问服务的方法,省去了很多无用的代码。
为什么要用RestTemplate
相信大家之前都用过apache的HTTPCl...
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory){
RestTemplate restTemplate = new RestTemplate(factory);
// 支持中文编码
restTemplate.getMess
1、什么是RestTemplate
RestTemple是Spring提供的用于访问Http请求的客户端;
相对于apache的HTTPClient类,逻辑繁琐,代码复杂,还要自己编写使用类HttpClientUtil,封装对应的post,get,delete等方法。
RestTemplate可以通过callback回调方法和配置HttpMessageConverter 来定制,用来把对象封装到HTTP请求体,将响应信息放到一个对象中。RestTemplate提供更高等级的符合HTTP的六种主要方法,可以很
1.Post请求
post请求需要用LinkedMultiValueMap来传递参数
String url = “https://xx.xx.com/app/order/getNumber”;
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
paramMap.add(“name”, “name”);
为什么要用RestTemplate??
相信大家之前都用过apache的HTTPClient类,逻辑繁琐,代码复杂,还要自己编写使用类HttpClientUtil,封装对应的post,get,delete等方法。
RestTemplate的行为可以通过callback回调方法和配置HttpMessageConverter 来定制,用来把对象封装到HTTP请求体,将响应信息放到一个对象中。Rest...
在RestTemplate发送请求得到非200状态结果的时候,间隔一定的时间再次发送n次请求。n次请求都失败之后,最后抛出HttpClientErrorException。
在开始本节代码之前,将上一节的RestTemplate自定义异常处理的代码注释掉,否则自动重试机制不会生效。
异常抛出之后,程序后面的代码就执行不到了,无法进行后面的代码执行。实际的业务开发中,有的时候我们更期望的结果是:不管你服务端是超时了还是服务不存在,我们都应该获得最终的请求结果(HTTP请求结果状态400、500),而不是获得一个抛出的异常。
二、源码解析-默认实现
首先我要说一个结论:RestTemplate请求结果异常是可以自定义处理的。在开始进行自定义的异常处理逻辑之前,我们有必要看一下异常处理的默认实现。也就是:为什么会产生上面小节提到的现象?
ResponseErrorHandler是RestTemplate请求结果的异常处理器接口
o接口的第一个方法hasError用于判断HttpResponse是否是异常响应(通过状态码)
o接口的第二个方法handleError用于处理异常响应结果(非200状态码段)
DefaultResponseErrorHandler是ResponseErrorHandler的默认实现
```java
RestTemplate restTemplate = new RestTemplate();
String url = "http://example.com/api/getData?id=123";
HttpHeaders headers = new HttpHeaders();
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
HttpEntity<?> requestEntity = new HttpEntity<>(headers);
ResponseEntity<String> responseEntity = restTemplate.exchange(
HttpMethod.GET,
requestEntity,
String.class);
String response = responseEntity.getBody();
在这个例子中,我们使用 `RestTemplate` 创建了一个 GET 请求。我们指定了请求 URL,并设置了一个 `Accept` 头部,表明我们想要 JSON 格式的响应。然后我们创建了一个 `HttpEntity` 对象,包含了我们的头部信息。最后,我们使用 `exchange` 方法发送请求,并将响应转化为一个 `String` 类型的对象。