需求:调用第三方接口,传入参数。获取相关的数据。
大致步骤
- HttpHeaders 封装请求头信息
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLYCATION_JSON);// 设置返回内容的MIME类型
headers.set("Authorization","Basic MTM0NzY3Omd5ZjEyMzQ1"); // 设置访问的权限
- HttpEntity封装请求(请求头、请求体)
// 请求参数,要与第三方接口属性一致,有些接口并没有设置不区分大小写。
JSONObject jsonObject = new JSONObject();
jsonObject.put("WERKS","");
jsonObject.put("BEJIN","");
jsonObject.put("END","");
HttpEntity entity = new HttpEntity(jsonObject,headers);//封装响应体,响应头
- 返回POJO
@Data
public class SapBaseRsp<T>{
//第三方接口对应的属性名
@JsonProperty("ETYPE")
private String status;
@JsonProperty("EMSG")
private String msg;
@JsonProperty("RETURN")
private T responseBody;
}
- RestTemplate访问远程服务, 使用ResponseEntity接收返回结果,并转换为json对象。
String url = "http://xxxxxxxxxxxx"; //访问的网址
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<SapBaseRsp> res = restTemplate.exchange(url,HttpMethos.POST,entity,SapBaseRsp.class);// 4个参数的含义为访问地址,请求方式,请求体,响应对象。
SapBaseRsp obj = res.getBody();
String obj1 = JSONObject.toJSONString(obj.getResponseBody);//FastJson类将pojo转换为字符串。
JSONObject object1 = new JSONObject();
//将json字符串转换为json对象
object1 = JSONObject.toParseObject(obj1);
//获取值
String name = object1.getString("NAME");//获取第三方接口的属性值。这样,不需要知道第三方接口的属性具体类型,全部当成字符串能够操作。
小结
- HttpHeaders可以根据需要自行配置多个值。
- HttpEntity封装的请求体不一定是JSONObject类型,使用Map也可以,要知道JSONObject本质也是map。若使用的是get方式的请求,可以没有这个对象。但若是使用的是post,则需要这个对象
- 使用RestTemplate对象时,有多种方法,根据需要选择
- < T > restTemplate.postForEntity() 其中T 为:ResponseEntity
- < T > restTemplate.postForObject() 其中T 为:方法参数中设置的对象
以上两者的区别是,第一种返回值包含了httpstatus和bodyBuilder,我们可以处理response原生的东西,比如响应的状态码等。第二种直接生成了实体,不能进行其他操作
- < T > restTemplate.exchange()
这种方法可以设置请求类型,是POST还是GET还是其他。
在请求第三方接口的时候,需要注意第三方接口返回类型值,与我们的值是否对应,否则转换会出错。