config
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
/**
* 超时时间20秒
*/
private static final int TIME_OUT = 1000 * 20;
@Bean
public RestTemplate restTemplate(){
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
// 链接超时1分钟
requestFactory.setConnectTimeout(TIME_OUT);
requestFactory.setReadTimeout(TIME_OUT);
return new RestTemplate(requestFactory);
}
}
引用
@Autowired
private RestTemplate restTemplate;
发送post请求传递json数据
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
/**
* @Auther: liyue
* @Date: 2020/11/11 10:33
* @Description:
*/
@Component
@Slf4j
public class SendHttpRequest {
@Autowired
private RestTemplate restTemplate;
private static final String LOG_PATTERN = System.lineSeparator()
+ " url:{}" + System.lineSeparator()
+ " req:{}" + System.lineSeparator()
+ " resp:{}" + System.lineSeparator()
+ " timeConsuming:{}" + System.lineSeparator();
public <T, Q> T post(String url, Q req, Class<T> clazz) {
// http请求头
HttpHeaders headers = new HttpHeaders();
// 请求头设置属性
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity<String> request = new HttpEntity<>(JSONObject.toJSONString(req), headers);
ResponseEntity<String> result;
try {
long startTime = System.currentTimeMillis();
result = restTemplate.exchange(url, HttpMethod.POST, request, String.class);
log.info("接口 {} 调用耗时:{}毫秒", url, System.currentTimeMillis() - startTime);
log.info(LOG_PATTERN, url, JSON.toJSON(req), result.getBody());
return JSON.parseObject(result.getBody(), clazz);
} catch (Exception e) {
log.error("调用失败,url: {}, error: {}", url, e);
throw new RuntimeException("接口调用失败");
}
}
}