16.4.4 抽取响应的元数据
作为 getForObject() 的一个替代方案,RestTemplate 还提供了 getForEntity()。getForEntity() 方法与 getForObject() 方法的工作很相似。getForObject() 只返回资源(通过 HTTP 信息转换器将其转换为 Java 对象),getForEntity() 会在 ResponseEntity 中返回相同的对象,而且 ResponseEntity 还带有关于响应的额外信息,如 HTTP 状态码和响应头。
我们可能想使用 ResponseEntity 所做的事就是获取响应头的一个值。例如,假设除了获取资源,还想要知道资源的最后修改时间。假设服务端在 LastModified 头部信息中提供了这个信息,我们可以这样像这样使用 getHeaders() 方法:
getHeaders() 方法返回一个 HttpHeaders 对象,该对象提供了多个便利的方法来查询响应头,包括 getLastModified(),它将返回从 1970 年 1 月 1 日开始的毫秒数。
除了 getLastModified(),HttpHeaders 还包含如下的方法来获取头信息:
为了实现更通用的 HTTP 头信息访问,HttpHeaders 提供了 get() 方法和 getFirst() 方法。两个方法都接受 String 参数来标识所需要的头信息。get() 将会返回一个 String 值的列表,其中的每个值都是赋给该头部信息的,而 getFirst() 方法只会返回第一个头信息的值。
如果你对响应的 HTTP 状态码感兴趣,那么你可以调用 getStatusCode() 方法。例如,考虑下面这个获取 Spittle 对象的方法:
在这里,如果服务器响应 304 状态,这意味着服务器端的内容自从上一次请求之后再也没有修改。在这种情况下,将会抛出自定义的 NotModifiedException 异常来表明客户端应该检查它的缓存来获取 Spittle。
Last updated