栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring系列之RestTemplate-21

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring系列之RestTemplate-21

目录

`RestTemplate`

初始化

URI标头 消息体消息转换Jackson视图

RestTemplate

它RestTemplate通过 HTTP 客户端库提供了更高级别的 API。它使在一行中调用 REST 端点变得容易。

初始化

默认构造函数用于java.net.HttpURLConnection执行请求。您可以切换到具有ClientHttpRequestFactory. 有对以下内容的内置支持:

Apache HttpComponents网状OkHttp

例如,要切换到 Apache HttpComponents,您可以使用以下命令:

RestTemplate template = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
URI

许多RestTemplate方法接受 URI 模板和 URI 模板变量,或者作为String变量参数,或者作为Map.

以下示例使用String变量参数:

String result = restTemplate.getForObject(
        "https://example.com/hotels/{hotel}/bookings/{booking}", String.class, "42", "21");

以下示例使用Map:

Map vars = Collections.singletonMap("hotel", "42");

String result = restTemplate.getForObject(
        "https://example.com/hotels/{hotel}/rooms/{hotel}", String.class, vars);

请记住,URI 模板是自动编码的,如以下示例所示:

restTemplate.getForObject("https://example.com/hotel list", String.class);

// Results in request to "https://example.com/hotel%20list"

您可以使用 的uriTemplateHandler属性来自RestTemplate定义 URI 的编码方式。或者,您可以准备 java.net.URI并将其传递给RestTemplate接受 a 的方法之一URI。

标头

您可以使用这些exchange()方法来指定请求标头,如以下示例所示:

String uriTemplate = "https://example.com/hotels/{hotel}";
URI uri = UriComponentsBuilder.fromUriString(uriTemplate).build(42);

RequestEntity requestEntity = RequestEntity.get(uri)
        .header("MyRequestHeader", "MyValue")
        .build();

ResponseEntity response = template.exchange(requestEntity, String.class);

String responseHeader = response.getHeaders().getFirst("MyResponseHeader");
String body = response.getBody();

您可以通过许多RestTemplate返回 ResponseEntity.

消息体

传递给方法和从RestTemplate方法返回的对象在HttpMessageConverter.

在 POST 上,输入对象被序列化为请求正文,如以下示例所示:

URI location = template.postForLocation("https://example.com/people", person);

您无需显式设置请求的 Content-Type 标头。在大多数情况下,您可以根据源Object类型找到兼容的消息转换器,并且选择的消息转换器会相应地设置内容类型。如有必要,您可以使用这些 exchange方法显式提供Content-Type请求标头,这反过来会影响选择的消息转换器。

在 GET 上,响应的主体被反序列化为 output Object,如以下示例所示:

Person person = restTemplate.getForObject("https://example.com/people/{id}", Person.class, 42);

请求的Accept标头不需要显式设置。在大多数情况下,可以根据预期的响应类型找到兼容的消息转换器,然后有助于填充Accept标头。如有必要,您可以使用这些exchange 方法显式提供Accept标头。

默认情况下,RestTemplate注册所有内置 消息转换器,具体取决于有助于确定存在哪些可选转换库的类路径检查。您还可以将消息转换器设置为显式使用。

消息转换

该spring-web模块包含通过和HttpMessageConverter读取和写入 HTTP 请求和响应正文的合同。 实例用于客户端和服务器端

框架中提供了主要媒体 (MIME) 类型的具体实现,默认情况下,RestTemplate在客户端和 RequestMethodHandlerAdapter服务器端注册。

的实现HttpMessageConverter将在以下部分中描述。对于所有转换器,都使用默认媒体类型,但您可以通过设置 supportedMediaTypesbean 属性来覆盖它。下表描述了每个实现:

Jackson视图

您可以指定Jackson JSON 视图 以仅序列化对象属性的子集,如以下示例所示:

MappingJacksonValue value = new MappingJacksonValue(new User("eric", "7!jd#h23"));
value.setSerializationView(User.WithoutPasswordView.class);

RequestEntity requestEntity =
    RequestEntity.post(new URI("https://example.com/user")).body(value);

ResponseEntity response = template.exchange(requestEntity, String.class);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/708408.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号