Spring Cloud【一】—— 微服务调用之HTTP bean多对象参数访问

本文详细介绍了如何在Spring Cloud中使用HTTP进行微服务调用,特别是处理bean封装的多对象参数。讲解了RestTemplate、SimpleClientHttpRequestFactory的超时设置,bean到MAP的转换,配置文件的变量设置,URL拼接等关键步骤,并提供了一个完整的项目说明,包括主要类和代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、应用说明

项目开发过程中,出于项目分离考虑、项目访问安全及项目集中化管理考虑,有时候需要建立接口层统一对接底层微服务,向外部暴露接口层访问信息,外部仅能访问接口层,接口获取相关信息拼接后再请求微服务请求,访问时携带bean封装的多对象参数,返回结果为JSON参数,封装成bean对象,本章主要介绍http请求方式访问方式。

二、涉及知识点介绍

1、RestTemplate

1)RestTemplate是string框架自带的通用处理类,继承HttpEntity,封装了http链接请求访问,可以大大简化与http的通信过程,变量包括URL链接和返回类型对象。
2)RestTemplate默认依赖JDK提供http连接的能力(HttpURLConnection),也可以通过setRequestFactory方法替换为例如 Apache HttpComponents、Netty或OkHttp等其它HTTP library。
3)RestTemplate类具有headForHeaders()、getForObject()、postForObject()、put()和delete()等方法。
RestTemplate client = new RestTemplate();
//执行HTTP请求
ResponseEntity<ResponseVo> response = client.getForEntity(httpUrl, ResponseVo.class);

2、SimpleClientHttpRequestFactory

RestTemplate的this.requestFactory 默认是没有超时时间处理,由于RestTemplate底层是SimpleClientHttpRequestFactory,可以通过自定义构造函数添加超时设置。

//复杂构造函数的使用
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
// 设置超时
requestFactory.setConnectTimeout(timeOut);

3、bean与MAP的转换

1)访问时携带bean封装的多对象参数,因此要将bean封装的多对象参数转换成map,方便后续URL链接拼接。
2)HashMap容量初始值设置为16可以有效提高性能,如果没有设置初始容量大小,随着元素的不断增加,HashMap会发生多次扩容,而HashMap中的扩容机制决定了每次扩容都需要重建hash表,因此非常影响性能。
3)Map是一个接口,每个元素包含一个key对象和一个value对象,对象间存在映射对应关系,访问元素时,指定key可以找到对应的value,因此key必须是唯一的不能重复,当key相同时,后面的value值会覆盖之前的value值。

public Map<String, Object> toMap() {
   
        Map<String, Object> map = new HashMap<>(16);
        BeanMap beanMap = BeanMap.create(this);
        for (Object key : beanMap.keySet()) {
   
            map.put(key + "", beanMap.get(key));
        }
        return map;
    }

4、配置文件设置相关变量值

application.yml配置文件配置相关变量,包括访问链接信息及超时时间

searchUrl = http://157.126.376.240/list
timeOut = 5000

java类调用配置文件相关值

@Value("${searchUrl}")
private String searchUrl;

@Value("${timeOut}")
private Integer timeOut;

6、URL 拼接

在固定的URL上拼接用户请求的参数返回访问链接。

public String getUrl(Map<String,Object> params){
   
        StringBuilder httpUrl = new StringBuilder(searchUrl);
        if(params != null){
   
            httpUrl.append("?");
            for</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值