构造 RestTemplate 实例
@Resource
private RestTemplate restTemplate;
// or
RestTemplate restTemplate = new RestTemplate();
构造数据
JSON
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// 使用 HashMap
Map<String, Object> map = new HashMap<>(16);
map.put(key, value);
// ...
@Resource
private ObjectMapper objectMapper;
// or
ObjectMapper objectMapper = new ObjectMapper();
// 序列化对象 (Unhandled exception: jackson.core.JsonProcessingException)
String requestData = objectMapper.writeValueAsString(map);
x-www-form-urlencoded
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
// 使用 LinkedMultiValueMap
MultiValueMap<String, Object> requestData = new LinkedMultiValueMap<>();
requestData.add(key, value);
// ...
发送请求
HttpEntity<String> request = new HttpEntity<>(requestData, headers);
// or
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(dataMap, requestData)
restTemplate.postForEntity(url, request, xxx.class)
泛型问题
需要使用 exchange 方法, 例如:
ParameterizedTypeReference<List<Map<String, String>>> type = new ParameterizedTypeReference<List<Map<String, String>>>() {
};
HttpEntity<String> request = new HttpEntity<>(string json, headers);
ResponseEntity<List<Map<String, String>>> url = restTemplate.exchange("url", HttpMethod.POST, request, type);