返回介绍

16.4.3 检索资源

发布于 2024-08-17 00:45:49 字数 1177 浏览 0 评论 0 收藏 0

getForObject()方法是检索资源的合适选择。我们请求一个资源并按照所选择的Java类型接收该资源。作为getForObject()能够做什么的一个简单示例,让我们看一下fetchFacebookProfile()的另一个实现:

在程序清单11.5中,fetchFacebookProfile()涉及十多行代码。通过使用RestTemplate,现在减少到了几行(如果我不是为了适应本书页面的边界,可能会更少)。

fetchFacebookProfile()首先构建了一个RestTemplate的实例(另一种可行的方式是注入实例)。接下来,它调用了getForObject()来得到Facebook个人信息。为了做到这一点,它要求结果是Profile对象。在接收到Profile对象后,该方法将其返回给调用者。

注意,在这个新版本的fetchFacebookProfile ()中,我们没有使用字符串连接来构建URL,而是利用了RestTemplate可以接受参数化URL这一功能。URL中的{id}占位符最终将会用方法的id参数来填充。getForObject()方法的最后一个参数是大小可变的参数列表,每个参数都会按出现顺序插入到指定URL的占位符中。

另外一种替代方案是将id参数放到Map中,并以id作为key,然后将这个Map作为最后一个参数传递给getForObject():

这里没有任何形式的JSON解析和对象映射。在表面之下,getForObject()为我们将响应体转换为对象。它实现这些需要依赖表16.1中所列的HTTP消息转换器,与带有@ResponseBody注解的Spring MVC处理方法所使用的一样。

这个方法也没有任何异常处理。这不是因为getForObject()不能抛出异常,而是因为它抛出的异常都是非检查型的。如果在getForObject()中有错误,将抛出非检查型RestClientException异常(或者它的一些子类)。如果愿意的话,你可以捕获它——但编译器不会强制你捕获它。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文