苏州网站搜索优化,wordpress 标签页面,深圳罗湖商城网站建设,个人电影网站建设收益在最近发布的Spring 6.1 M2版本中#xff0c;推出了一个全新的同步HTTP客户端#xff1a;RestClient。用一句话来让Spring开发者认识RestClient的话#xff1a;像WebClient一样具备流畅API的RestTemplate。 所以#xff0c;RestClient的使命就是淘汰已经有14年历史的RestTe… 在最近发布的Spring 6.1 M2版本中推出了一个全新的同步HTTP客户端RestClient。用一句话来让Spring开发者认识RestClient的话像WebClient一样具备流畅API的RestTemplate。 所以RestClient的使命就是淘汰已经有14年历史的RestTemplate。 关于WebClient和RestTemplate之前在几种服务消费方式RestTemplate、WebClient、Feignhttps://blog.didispace.com/spring-cloud-alibaba-2/这篇文章中有详细的介绍。如果您有一定的了解那么对于RestClient一定可以快速上手。 RestClient案例 下面我们通过几个官方给出的案例一起来快速的认识一下RestClient。 HTTP请求 下面是一个最简单的GET请求返回一个字符串。从这个例子中我们可以看到API形式跟WebClient类似。不像以前用RestTemplate的时候那么麻烦。 RestClient restClient RestClient.create();String result restClient.get().uri(https://example.com).retrieve().body(String.class);
System.out.println(result); 关于GET请求很多时候我们返回的不仅仅是String更多的时候是一些实体同时我们有时候还需要获取HTTP状态码以及头信息。这个时候我们可以使用toEntity方法来返回一个更为通用的ResponseEntity来进行后续操作比如下面这样 ResponseEntityString result restClient.get().uri(https://example.com).retrieve().toEntity(String.class);System.out.println(Response status: result.getStatusCode());
System.out.println(Response headers: result.getHeaders());
System.out.println(Contents: result.getBody()); 在业务层面为了更方便的解析业务数据。RestClient还支持对结果进行对象转换。比如下面的例子就是把HTTP请求返回的JSON数据转化为Pet对象。这样就免去了开发者手动从ResponseEntity中获取内容再进行消息转化的麻烦。 int id ...
Pet pet restClient.get().uri(https://petclinic.example.com/pets/{id}, id).accept(APPLICATION_JSON).retrieve().body(Pet.class); 关于其他请求也是类似的比如下面的POST请求 Pet pet ...
ResponseEntityVoid response restClient.post().uri(https://petclinic.example.com/pets/new).contentType(APPLICATION_JSON).body(pet).retrieve().toBodilessEntity(); 错误处理 默认情况下RestClient在接收到4xx和5xx状态码的时候会抛出一个RestClientException的子类。对于这个动作我们可以通过onStatus方法去重写它比如下面这样 String result restClient.get().uri(https://example.com/this-url-does-not-exist).retrieve().onStatus(HttpStatusCode::is4xxClientError, (request, response) - {throw new MyCustomRuntimeException(response.getStatusCode(), response.getHeaders())}).body(String.class); 上面的例子是进一步做了包装并重新抛出。当然您也可以做一些业务性的其他操作。 高级处理 Exchange 直接看下面的例子 Pet result restClient.get().uri(https://petclinic.example.com/pets/{id}, id).accept(APPLICATION_JSON).exchange((request, response) - {if (response.getStatusCode().is4xxClientError()) {throw new MyCustomRuntimeException(response.getStatusCode(), response.getHeaders());}else {Pet pet convertResponse(response);return pet;}}); exchange方法提供了更灵活且完整的请求处理入口。在这里开发者里获取到request信息也可以操作response信息。所以如果您有复杂的处理逻辑上一节中的请求方法无法满足你需要的时候就可以通过这里的exchange方法来定制复杂的处理逻辑。 小结 相信大家对RestTemplate一定都不陌生但实际应用估计已经不是很多了更多的会使用一些其他的客户端来实现HTTP的调用。如今Spring 6.1将推出的RestClient将很好的弥补这块不足同时与WebClient互相补充。 ------ 我们创建了一个高质量的技术交流群与优秀的人在一起自己也会优秀起来赶紧点击加群享受一起成长的快乐。另外如果你最近想跳槽的话年前我花了2周时间收集了一波大厂面经节后准备跳槽的可以点击这里领取 推荐阅读 MySQL的“分库分表”思路可不能盲目应用到 ElasticsearchIntelliJ IDEA 新增 Kotlin Notebook 插件Spring Boot自带的工具类不要太好用建议收藏 ·································· 你好我是程序猿DD10年开发老司机、阿里云MVP、腾讯云TVP、出过书创过业、国企4年互联网6年。从普通开发到架构师、再到合伙人。一路过来给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来多思考、少抱怨、勤动手就很容易实现弯道超车所以不要问我现在干什么是否来得及。如果你看好一个事情一定是坚持了才能看到希望而不是看到希望才去坚持。相信我只要坚持下来你一定比现在更好如果你还没什么方向可以先关注我这里会经常分享一些前沿资讯帮你积累弯道超车的资本。