使用 RestTemplate 发送 json 或 formData 数据

5,552 阅读1分钟

构造 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);