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只有返回值类型不同,功能相同

image-get

/*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方法请求预览

img-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请求方法预览

img-put

3.4 delete请求方法预览

img-delete

4.ResponseEntity使用细节

4.1.接收RestTemplate中forEntity方法的请求结果

img-entity-get

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:头信息对象

img-header

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静态方法:

img-entity-static

BodyBuilder的方法:

img-body

posted @   疯自*  阅读(235)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示