返回介绍

16.4.5 PUT 资源

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

为了对数据进行PUT操作,RestTemplate提供了三个简单的put()方法。就像其他的RestTemplate方法一样,put()方法有三种形式:

按照它最简单的形式,put()接受一个java.net.URI,用来标识(及定位)要将资源发送到服务器上,另外还接受一个对象,这代表了资源的Java表述。

例如,以下展现了如何使用基于URI版本的put()方法来更新服务器上的Spittle资源:

在这里,尽管方法签名很简单,但是使用java.net.URI作为参数的影响很明显。为了创建所更新Spittle对象的URL,我们要进行字符串拼接。

从getForObject()和getForEntity()方法中我们也看到了,使用基于String的其他put()方法能够为我们减少创建URI的不便。这些方法可以将URI指定为模板并对可变部分插入值。以下是使用基于String的put()方法重写的updateSpittle():

现在的URI使用简单的String模板来进行表示。当RestTemplate发送PUT请求时,URI模板将{id}部分用spittle.getId()方法的返回值来进行替换。就像getForObject()和getForEntity()一样,这个版本的put()方法最后一个参数是大小可变的参数列表,每一个值会出现按照顺序赋值给占位符变量。

你还可以将模板参数作为Map传递进来:

当使用Map来传递模板参数时,Map条目的每个key值与URI模板中占位符变量的名字相同。

在所有版本的put()中,第二个参数都是表示资源的Java对象,它将按照指定的URI发送到服务器端。在本示例中,它是一个Spittle对象。RestTemplate将使用表16.1中的某个HTTP消息转换器将Spittle对象转换为一种表述形式,并在请求体中将其发送到服务器端。

对象将被转换成什么样的内容类型很大程度上取决于传递给put()方法的类型。如果给定一个String值,那么将会使用StringHttpMessageConverter:这个值直接被写到请求体中,内容类型设置为“text/plain”。如果给定一个MultiValueMap<String,String>,那么这个Map中的值将会被FormHttpMessageConverter以“application/x-www-form-urlencoded”的格式写到请求体中。

因为我们传递进来的是Spittle对象,所以需要一个能够处理任意对象的信息转换器。如果在类路径下包含Jackson 2库,那么MappingJacksonHttpMessageConverter将以application/json格式将Spittle写到请求中。

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

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

发布评论

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