创建线程安全的RestTemplate单例(懒汉模式)
@Component
@Lazy(false)
public class SimpleRestClient {
private static final Logger LOGGER = LoggerFactory.getLogger(SimpleRestClient.class);
private static RestTemplate restTemplate;
static {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setReadTimeout(5000);
requestFactory.setConnectTimeout(5000);
// 添加转换器
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
messageConverters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
messageConverters.add(new FormHttpMessageConverter());
messageConverters.add(new MappingJackson2HttpMessageConverter());
restTemplate = new RestTemplate(messageConverters);
restTemplate.setRequestFactory(requestFactory);
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
LOGGER.info("SimpleRestClient初始化完成");
}
private SimpleRestClient() {
}
@PostConstruct
public static RestTemplate getClient() {
return restTemplate;
}
}
GET
1、带header的get
HttpHeaders headers = new HttpHeaders();
headers.add("ApiKey", token);
// 发送请求
ResponseEntity<String> exchange = restTemplate.exchange(
url
, HttpMethod.GET
, new HttpEntity<String>(headers)
, String.class);
String res = exchange.getBody();
POST
1、带header和body的post
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
// 设置content-type
MediaType type = MediaType.parseMediaType("application/json;charset=UTF-8");
headers.setContentType(type);
// 设置请求头
headers.add("ApiKey", param.getStr("ApiKey"));
// 当没有请求头信息时,用 MultiValueMap<String, Object> map=new LinkedMultiValueMap<>();
// 当有请求头信息时,用 HashMap<String, Object> map = new HashMap<>();
HashMap<String, Object> body = new HashMap<>();
body.put("CustomerKey", param.getStr("CustomerKey"));
body.put("StartIndex", 0);// 开始条数
body.put("EndIndex", 1000);// 结束条数
//用HttpEntity封装整个请求报文
HttpEntity<HashMap<String, Object>> httpEntity = new HttpEntity<>(body, headers);
//服务端返回的json格式:
String result = restTemplate.postForObject(realTimeDataUrl, httpEntity, String.class);