第三天學習
阿新 • • 發佈:2022-02-19
RestTemplate
1.作用
RestTemplate是Spring提供的用於傳送HTTP請求的客戶端工具,它遵循Restful原則,RestTemplate預設依賴JDK的Http連線工具HttpUrlConnection,你也可以替換不同的源,比如OkHttp、Apache HttpComponents 等等。
2.SpringBoot整合RestTemplate,快速入門
1.匯入依賴
RestTemplate是spring的一個rest客戶端,在spring-web這個包下,spring boot的依賴如下
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2.新增配置類
@Configuration public class WebConfig { @Bean public RestTemplate getRestTemplate() { RestTemplate restTemplate = new RestTemplate(); //解決中文亂碼 restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8)); return restTemplate; } }
3.注入RestTemplate使用
@Autowired
private RestTemplate restTemplate;
3.RestTemplate使用細節
3.1 get請求方法預覽
ForObject與ForEntity只有返回值型別不同,功能相同
/*forObject 1.url請求路徑 2.該url請求後返回型別,如果是一個實體類物件的json格式字串,可以直接幫你轉換成實體類物件 3.uriVariables:URL後面接的引數http://localhost:8081/findById/1/lisi,可變參,可以不傳 forEntity與forObject呼叫除了接收型別不一樣,其他都一樣 */ String forObject = restTemplate.getForObject("http://localhost:8081/findById/{id}/{name}", String.class,1,"lisi"); ResponseEntity<String> forEntity = restTemplate.getForEntity("http://localhost:8081/findById/{id}", String.class, 1);
3.2 post方法請求預覽
/*
post請求請求體傳參
1.url請求路徑
2.請求引數(包括請求體與請求頭的引數)可以傳httpEntity,沒有可以傳null
3.該url請求後返回型別,如果是一個實體類物件的json格式字串,可以直接幫你轉換成實體類物件
4.uriVariables:URL後面接的引數http://localhost:8081/findById/1/lisi,可變參,可以不傳
HttpEntity:http實體,建立時傳入請求體內容以及請求頭
HttpHeaders:請求頭資訊直接new
httpHeaders.add("token","tokenValue");新增頭資訊
httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);設定請求引數型別,告知伺服器發的是什麼內容,以及編碼
MediaType:常量類,MIME型別
*/
//封裝請求體引數
Map<Object,Object> body = new HashMap<>();
body.put("id", 1);
body.put("name", "張三");
//封裝請求頭引數
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("token", "tokenValue");
// 設定請求型別
httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
// 封裝引數和頭資訊
HttpEntity<Map> httpEntity = new HttpEntity<>(body, httpHeaders);
restTemplate.postForObject("http://www.baidu.com", httpEntity, String.class, 1, "lisi");
3.3 put請求方法預覽
3.4 delete請求方法預覽
4.ResponseEntity使用細節
4.1.接收RestTemplate中forEntity方法的請求結果
4.1.2 HttpStatus:狀態物件
ResponseEntity<String> entity = restTemplate.getForEntity("http://localhost:8081/findById/{id}/{name}",String.class, 1, "lisi");
HttpStatus statusCode = entity.getStatusCode();
String reasonPhrase = statusCode.getReasonPhrase();//獲取狀態描述
int value = statusCode.value();//獲取狀態碼
boolean flag = statusCode.is1xxInformational();//狀態碼是否是1開頭
boolean flag = statusCode.is2xxSuccessful();//狀態碼是否是2開頭
boolean flag = statusCode.is3xxRedirection();//狀態碼是否是3開頭
boolean flag = statusCode.is4xxClientError();//狀態碼是否是4開頭
boolean flag = statusCode.is5xxServerError();//狀態碼是否是5開頭
4.1.3 HttpHeaders:頭資訊物件
4.2.作為Controller方法的返回值型別
ResponseEntity標識整個http相應:狀態碼、頭部資訊以及相應體內容。因此我們可以使用其對http響應實現完整配置。僅使用@ResponseBody註解不能設定響應頭和響應狀態碼。
@GetMapping("find")
public ResponseEntity<Object> testResponseEneity(){
return ResponseEntity.ok().build();
}
可以通過程式設計方式指明響應狀態,所以根據不同場景返回不同狀態:
@GetMapping("find")
public ResponseEntity<Object> testResponseEneity(){
if(1==1){
return ResponseEntity.ok("該處可填寫響應體中內容");//ok代表狀態碼200 OK
}
//HttpStatus為列舉,其中聲明瞭常用響應碼與狀態描述
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
另外,還可以設定http響應頭:
@GetMapping("find")
public ResponseEntity<Object> testResponseEneity(){
return ResponseEntity.ok().header("token","tokenValue").build();
}
ResponseEntity靜態方法:
BodyBuilder的方法: