项目中使用RestTemplate请求第三方api接口,第三方接口返回的类型是这样的
@Data
public class ResultBody<T> {
/**
* 返回结果代号
*/
private String resultCode;
/**
* 返回结果描述
*/
private String resultDesc;
/**
* 返回结果数据
*/
private T resultData;
}
所以得需要泛型来接口具体data。RestTemplate也是支持这种接口泛型方式的,只是封装的不是很好,用起来有点复杂。
需要使用RestTemplate的exchange方法发起调用请求,同时需要ParameterizedTypeReference类来作为参数,具体使用方式如下。
private static <T> T exchange(String url, Object request, ParameterizedTypeReference<T> reference) {
RestTemplate restTemplate = new RestTemplate();
// 请求头
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("Accept", "application/json");
String message = JSON.toJSONString(request);
HttpEntity<String> httpEntity = new HttpEntity<>(message, headers);
ResponseEntity<T> responseEntity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, reference);
return responseEntity.getBody();
}
调用方式如下
public static void main(String[] args) {
String url = "http://127.0.0.1:8080/api/user/user/login";
ParameterizedTypeReference<ResultBody<AppUserInfoVO>> reference = new ParameterizedTypeReference<ResultBody<AppUserInfoVO>>(){};
Map<String, Object> request = new HashMap<>();
request.put("phone", 1111111L);
request.put("code", "1234");
ResultBody<AppUserInfoVO> resultBody = exchange(url, request, reference);
System.out.println(resultBody);
}
发起请求赶紧试一下吧