- 作者简介
- 内容提要
- 关于本书
- 路线图
- 代码规范与下载
- 作者在线
- 封面插图简介
- 前言
- 译者序
- 致谢
- 第1部分 Spring 的核心
- 第1章 Spring 之旅
- 第2章 装配 Bean
- 第3章 高级装配
- 第4章 面向切面的 Spring
- 第2部分 Web 中的 Spring
- 第5章 构建 Spring Web 应用程序
- 第6章 渲染 Web 视图
- 第7章 Spring MVC 的高级技术
- 第8章 使用 Spring Web Flow
- 第9章 保护 Web 应用
- 第3部分 后端中的 Spring
- 第10章 通过 Spring 和 JDBC 征服数据库
- 第11章 使用对象-关系映射持久化数据
- 第12章 使用 NoSQL 数据库
- 第13章 缓存数据
- 第14章 保护方法应用
- 第4部分 Spring 集成
- 第15章 使用远程服务
- 第16章 使用 Spring MVC 创建 REST API
- 第17章 Spring消息
- 第18章 使用 WebSocket 和 STOMP 实现消息功能
- 第19章 使用 Spring 发送 Email
- 第20章 使用 JMX 管理 Spring Bean
- 第21章 借助 Spring Boot 简化 Spring 开发
16.4.5 PUT 资源
为了对数据进行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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论