RestTemplate
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的方法:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)