Spring Cloud RestTemplate 使用

RestTemplate简绍

RestTemplate同步客户端执行 HTTP 请求,通过底层 HTTP 客户端库(例如 JDK HttpURLConnection、Apache HttpComponents 等)公开简单的模板方法 API。除了支持不常见情况的通用方法 exchange之外,RestTemplate 还通过 HTTP 方法提供常见场景的模板。execute
RestTemplate 通常用作共享组件。但是,其配置不支持并发修改,因此其配置通常在启动时准备。如果需要,您可以在启动时创建多个不同配置的 RestTemplate 实例。ClientHttpRequestFactory 如果需要共享 HTTP 客户端资源,这些实例可以使用相同的底层。

具体在使用Spring boot 中使用

可以自己在 创建个配置类 @Bean 注入 或者在 启动方法中 去进行Bean注入

@SpringBootApplication
public class CartApplication {
    public static void main(String[] args) {
        SpringApplication.run(CartApplication.class, args);
    }


    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

在使用时 通过 lombok 方法的 @RequiredArgsConstructor 或者自行使用 @Autowired 进行注入
lombok 需要导入jar 包

<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>1.18.22</version>
</dependency>

将 @RequiredArgsConstructor写在 具体的类上
声明的变量必须加上final修饰
基于构造方法为属性赋值,容器通过调用类的构造方法将其进行依赖注入
如下示例

@Service
@RequiredArgsConstructor
public class CartServiceImpl extends ServiceImpl<CartMapper, Cart> implements ICartService {

    private final RestTemplate restTemplate;
}

使用 RestTemplate 具体方法
内部有很多 post, get, put,delete 方法 根据需要进行使用, 当前只表示通用的调用
exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, ParameterizedTypeReference responseType, Map

  • url: 网址信息
  • HttpMethod: 可以选择 post, get, put, delete 状态
  • HttpEntity:具体表头信息和主体信息可以通过这个补充,表示 HTTP 请求或响应实体,由标头和正文组成。经常与 结合使用RestTemplate,例如:
    	HttpHeaders headers = new HttpHeaders(); 
    	headers.setContentType(MediaType.TEXT_PLAIN); 
    	HttpEntity<String> entity = new HttpEntity<>("Hello World", headers); 
    	URI location = template.postForLocation("https://example.com", entity);
    	或者
    	HttpEntity<String> entity = template.getForEntity("https://example.com", String.class); 
    	String body = entity.getBody(); 
    	MediaType contentType = entity.getHeaders().getContentType();
    
  • ParameterizedTypeReference: 超类型标记模式会捕获类信息中的泛型参数,以避免Java语言中类型擦除的限制。此类的目的是允许捕获和传递泛型 Type。为了捕获泛型类型并在运行时保留它,您需要创建一个子类(最好是匿名内联类),如下所示:
    	ParameterizedTypeReference <List<String>> typeRef = new ParameterizedTypeReference <List<String>>() {};
    
    typeRef然后可以使用生成的实例来获取Type 在运行时携带捕获的参数化类型信息的实例。有关“超类型标记”的更多信息,请参阅 Neal Gafter 的博客文章链接。
    Neal Gafter 谈超级类型标记

如下示例

HttpEntity<String> entity = new HttpEntity<>("Hello World", headers); 
ResponseEntity<List<ItemDTO>> responseEntity = restTemplate.exchange(
		"http://localhost:8081/items?ids={ids}",
		HttpMethod.GET,
		entity,
		new ParameterizedTypeReference<List<ItemDTO>>() {
		},
		Map.of("ids", CollUtils.join(itemIds, ","))
);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值