一、基础知识:
1.Session: 我们可以把客户端浏览器与服务器之间一系列交互的动作称为一个 Session。
Session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端。
2.cookie: 是浏览器保存在用户电脑上的一小段文本,通俗的来讲就是当一个用户通过 http访问到服务器时,由服务器端生成,发送给User-Agent(一般是浏览器),服务器会将一些 Key/Value键值对返回给客户端浏览器(存储在客户端)。
3.Headers: 包括请求头和响应头,请求头:它是 HTTP 头的一种,它可在 HTTP 请求中使用,并且和请求主体无关。某些请求头如 Accept、Accept-、 If-允许执行条件请求。某些请求头如:Cookie, User-Agent 和 Referer 描述了请求本身以确保服务端能返回正确的响应。
响应头:与请求头类似,不过是接口返回数据的时候,由服务器设置的,比如里面会带上,服务器想要设置的一些cookie信息。然后交由服务器写入到客户端。
4. Token: 是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。token可以设置在cookie或者headers中,都可以。
5. 公参:顾名思义就是公共参数,一般会放在headers中,让所有请求都带上这个参数,服务器会对他做一些处理。比较常用的比如:会在headers中设置app的版本,用于服务器进行接口的版本兼容。
二、示例
2.1 无需传参,
RestTemplate restTemplate = new RestTemplate();
ResponseBean responseBean = restTemplate.postForObject(url, JSONObject.class);
2.2 需要传递cooke
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
List<String> cookies = new ArrayList<>();
cookies.add("access_token=eyJraWQiOiJmN2E5ODM1ZS1jNjQ4LTRlMDItYWMwYi0wZGZhOTc3YzJmZWUiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxODAyMTUxMTI1OCIsInVzZXJfbmFtZSI6IjE4MDIxNTExMjU4IiwiaXNzIjoiaHR0cDpcL1wvMTAuOC4wLjM6MzM2ODgiLCJzeXMiOmZhbHNlLCJjbGllbnRfaWQiOiJ3ZWJfYXBwIiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9BRE1JTiJdLCJhdWQiOiJ3ZWJfYXBwIiwibmJmIjoxNjk4NjI5MTYyLCJ1c2VyX2luZm8iOnsibmFtZSI6IuaWh-eDvSIsInRlbCI6IjE4MDIxNTExMjU4IiwibG9naW4iOiIyYWU5ZGVlMDg1OWE0ZjU5YTNiZDdlMjc5YjZlZjIyYSJ9LCJzY29wZSI6WyJvcGVuaWQiXSwiZXhwIjoxNjk4NzE1NTYyLCJpYXQiOjE2OTg2MjkxNjIsImp0aSI6ImE2NDcyYWI2LTlhZGMtNDEwZi05MmE2LThhNDJiZDRlZDc5NSJ9.gAdHmWQfEijS-UkjNRLEBSf_Y3NfremRBw165np5qQBr4jIxBUad4EJzDa2NgeeFbnZrPjtmu3MFWYCE134uRuHVaxL9IH3xnSpNBxMuJFPhMELmvJI2yiiIVvkbhsG8AKp9Z-F0cmnD34qNodA7NWql4FYHkJBacDM0DX01YjBUfxo1aMBw5BSz7GEHY_PtAEGTecY_iV7FPTaz9WuEcu39V9BuzZXD966tjo5QWbM02a7Fxa-R7kfi_SOHtvCrkoTNemNrHlo3XLY0QVrggTGzhGLL12mDt8vVtD-zDuE02i9Ah7NgM1J_C-gfhIm8ehCogqs9O8e-6hvo70fC2Q" );
cookies.add("refresh_token=eyJraWQiOiJmN2E5ODM1ZS1jNjQ4LTRlMDItYWMwYi0wZGZhOTc3YzJmZWUiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxODAyMTUxMTI1OCIsInVzZXJfbmFtZSI6IjE4MDIxNTExMjU4IiwiaXNzIjoiaHR0cDpcL1wvMTAuOC4wLjM6MzM2ODgiLCJzeXMiOmZhbHNlLCJjbGllbnRfaWQiOiJ3ZWJfYXBwIiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9BRE1JTiJdLCJhdWQiOiJ3ZWJfYXBwIiwibmJmIjoxNjk4NjI5MTYyLCJ1c2VyX2luZm8iOnsibmFtZSI6IuaWh-eDvSIsInRlbCI6IjE4MDIxNTExMjU4IiwibG9naW4iOiIyYWU5ZGVlMDg1OWE0ZjU5YTNiZDdlMjc5YjZlZjIyYSJ9LCJzY29wZSI6WyJvcGVuaWQiXSwiZXhwIjoxNjk4NzE1NTYyLCJpYXQiOjE2OTg2MjkxNjIsImp0aSI6ImE2NDcyYWI2LTlhZGMtNDEwZi05MmE2LThhNDJiZDRlZDc5NSJ9.gAdHmWQfEijS-UkjNRLEBSf_Y3NfremRBw165np5qQBr4jIxBUad4EJzDa2NgeeFbnZrPjtmu3MFWYCE134uRuHVaxL9IH3xnSpNBxMuJFPhMELmvJI2yiiIVvkbhsG8AKp9Z-F0cmnD34qNodA7NWql4FYHkJBacDM0DX01YjBUfxo1aMBw5BSz7GEHY_PtAEGTecY_iV7FPTaz9WuEcu39V9BuzZXD966tjo5QWbM02a7Fxa-R7kfi_SOHtvCrkoTNemNrHlo3XLY0QVrggTGzhGLL12mDt8vVtD-zDuE02i9Ah7NgM1J_C-gfhIm8ehCogqs9O8e-6hvo70fC2Q") ;
cookies.add("session_token=undefined");
cookies.add("expireCookie=undefined");
cookies.add("tenant={%22id%22:1381%2C%22name%22:%22%E6%96%87%E7%83%BD%22%2C%22latitude%22:107.73%2C%22longitude%22:29.87%2C%22code%22:%22chqfengdu%22%2C%22scaleLevel%22:13%2C%22imageUrl%22:null%2C%22fullName%22:%22%E9%87%8D%E5%BA%86%E4%B8%B0%E9%83%BD%22%2C%22shortName%22:null%2C%22orgId%22:212%2C%22orgName%22:%22%E5%8D%8E%E4%B8%9C%E9%99%A2%22%2C%22tel%22:%2218021511258%22}");
headers.put(HttpHeaders.COOKIE, cookies);
HttpEntity<String> requestEntity = new HttpEntity<>(headers);
return restTemplate.exchange("https://swt.akenc.com/api/hdyfd/api/psPumpstation/list", HttpMethod.GET,requestEntity,JSONObject.class).getBody();
2.3 传递参数
// 把参数放在Map中
ResponseEntity<String> entity = template.getForEntity("http://localhost:8081/get/?productId={productId}&name={name}&price={price}", String.class, new HashMap<String, Object>() {
{
put("productId", 99);
put("name", "百事可乐");
put("price", 45.55);
}
});
3 post请求
//方式1 提交的表单参数
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("productId", 123);
params.add("name", "王中王");
params.add("price", 45.33);
ResponseEntity<String> post = postTem.postForEntity("http://localhost:8081/post", params, String.class);
System.out.println(post);
3.2
// json入参
public static void postBody() {
RestTemplate template = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_PROBLEM_JSON);
JSONObject params = new JSONObject();
params.append("productId", 99);
params.append("name", "腊肠");
params.append("price", 45.33);
HttpEntity<String> entity = new HttpEntity<>(params.toJSONString(5), headers);
ResponseEntity<String> forEntity = template.postForEntity("http://localhost:8081/post", entity, String.class);
System.out.println(forEntity);
}