SpringCloud中RestTemplate的使用


SpringCloud中RestTemplate的使用

随着微服务的广泛使用,在实际的开发中,客户端代码中调用RESTful接口也越来越常见。RestTemplate 就是 Spring 封装的处理同步 HTTP 请求的类。

一、概念定义

RestTemplate采用同步方式执行 HTTP 请求的类,底层使用 JDK 原生HttpURLConnectionAPI ,或者 HttpComponents等其他 HTTP 客户端请求类库。 RestTemplate提供模板化的方法让开发者能更简单地发送 HTTP 请求。Spring 5开始,更推荐使用非阻塞的响应式 HTTP 请求处理类 org.springframework.web.reactive.client.WebClient来替代 RestTemplate,尤其是对应异步请求处理的场景上,使用方式和RestTemplate基本类似,但性能更强,吞吐更好 。

二、 RestTemplate 类的API

方法名 描述
getForObject 通过 GET 请求获得响应结果
getForEntity 通过 GET 请求获取 ResponseEntity对象,包容有状态码,响应头和响应数据
headForHeaders 以 HEAD 请求资源返回所有响应头信息
postForLocation 用 POST 请求创建资源,并返回响应数据中响应头的字段 Location 的数据
postForObject 通过 PATCH 请求创建资源,获得响应结果
put 通过 PUT 方式请求来创建或者更新资源
patchForObject 通过 PATH 方式请求来更新资源,并获得响应结果。(JDK HttpURLConnection不支持 PATH 方式请求,其他 HTTP 客户端库支持)
delete 通过 DELETE 方式删除资源
optionsForAllow 通过 ALLOW 方式请求来获得资源所允许访问的所有 HTTP 方法,可用看某个请求支持哪些请求方式
exchange 更通用版本的请求处理方法,接受一个 RequestEntity对象,可以设置路径,请求头,请求信息等,最后返回一个 ResponseEntity 实体
execute 最通用的执行 HTTP 请求的方法,上面所有方法都是基于 execute的封装,全面控制请求信息,并通过回调接口获得响应数据

RESTful:用 URL 定位资源,用 HTTP 动词描述操作,如 GET,POST,DELETE,PUT,简单来说通过 URL 就知道访问什么资源,通过 HTTP Method 就知道执行什么操作,通过 HTTP Status Code 就知道执行结果。

三、代码示例

在学习SpringCloud时,编写服务消费者(电影微服务)时使用RestTemplate实现了基于HTTP的远程调用,调用用户微服务的RESTful API,从而查询指定id的用户信息。

1、启动类:

@SpringBootApplication
public class MovieApplication {

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(MovieApplication.class, args);
    }
}

2、controller层:

@RequestMapping("/movies")
@RestController
public class MovieController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/users/{id}")
    public User findById(@PathVariable Long id){
        // 这里用到了RestTemplate的占位符能力
        User user = this.restTemplate.getForObject("http://localhost:8000/users/{id}", User.class, id);
        //...微服务业务...
        return user;
    }
}

参考引用:

闻人的技术博客—https://juejin.im/post/5cd680eff265da037b612e28

周立—http://www.itmuch.com/spring-cloud/finchley-2/


评论
评论
  目录