当前位置: 首页 > news >正文

花生壳网站无法登陆做社交网站用什么语言

花生壳网站无法登陆,做社交网站用什么语言,万网域名中文网站查询,郑州网站建设模板背景 最近在编写多个系统数据集成过程中,经常会使用到FeignClient注解标记一个类,类里面编写很多请求方法,如果第三方系统有非常多的URL请求,每个方法对应一个URL请求,那么这个类就会非常的庞大,是否有一种…

背景

最近在编写多个系统数据集成过程中,经常会使用到@FeignClient注解标记一个类,类里面编写很多请求方法,如果第三方系统有非常多的URL请求,每个方法对应一个URL请求,那么这个类就会非常的庞大,是否有一种方法能够动态的设置URL,只需要编写一个或者两三个通用的方法解决这个问题,笔者最近就在项目中亲测过以下封装方式。

最初的方式

假如有一个TestFeignClient,如下所示:

@FeignClient(name = "test", url = "http://localhost", contextId = "testFeignClient")
public interface TestFeignClient {/*** 获取产品列表数据** @param map* @return*/@PostMapping(value = "/api/v1/getProductList")String getProductList(@RequestBody Map<String, Object> map);/*** 获取订单列表数据** @param map* @return*/@PostMapping(value = "/api/v1/getOrderList")String getOrderList(@RequestBody Map<String, Object> map);
}

以上,如果这个TestFeignClient方法特别多,这个类会非常庞大

改进的方式

将TestFeignClient中两个方法统一封装成一个doPost方法,只需要传递URL请求参数到Map集合中即可通过拦截器自动替换,从而做到了通用,如下:

@FeignClient(name = "test", url = "http://localhost", contextId = "testFeignClient", configuration = TestConfiguration.class)
public interface TestCommonFeignClient {/*** POST通用请求** @param map* @return*/@PostMapping(value = "templateReqUrlKey")String doPost( @RequestBody Map<String, Object> map);
}

关键类在于TestConfiguration拦截并在请求之前替换了对应的真实URL,大致代码如下:

@Slf4j
@AllArgsConstructor
public class TestConfiguration {public final ObjectMapper objectMapper;@Beanpublic Retryer retryer() {return new TestRetryer();}/*** 配置请求拦截器** @return*/@Beanpublic RequestInterceptor testRequestInterceptor() {return template -> {template.header("Content-Type", "application/json");if (template.method().equals(Request.HttpMethod.POST.name())) {String body = new String(template.body(), StandardCharsets.UTF_8);Map<String, Object> bodyMap = new HashMap<>();try {bodyMap = objectMapper.readValue(body,new TypeReference<Map<String, Object>>() {});} catch (JsonProcessingException e) {log.error("json解析出错,", e);}String srcUrl = template.url();String templateUrl = "";if (bodyMap.containsKey("templateReqUrlKey") && srcUrl.contains("templateReqUrlKey")) {templateUrl = bodyMap.get("templateReqUrlKey").toString();template.uri(templateUrl);}bodyMap.remove("templateReqUrlKey");template.body(JSONUtil.toJsonStr(bodyMap));}};}@Beanpublic Decoder decoder() {return (response, type) -> {String resultStr = IOUtils.toString(response.body().asInputStream(), String.valueOf(StandardCharsets.UTF_8));JSONObject obj = JSONUtil.parseObj(resultStr);String code = obj.get("code").toString();if (Objects.equals("200", code)) {// TODO throw new RetryableException(500, obj.getStr("msg"), response.request().httpMethod(), null, response.request());}return resultStr;};}}

以上拦截器testRequestInterceptor中替换了原始templateReqUrlKey,从而实现了客户端设置真实url到bodyMap中,请求之前替换templateReqUrlKey,这样就比较灵活的应对第三方系统数据集成。

最后

以上提到的bodyMap可设置真实的URL地址,笔者将这个真实URL地址做成了一个config配置表存储,每次获取对应接口的URL即可,同时笔者将bodyMap中整个URL请求的json数据都可以做成配置,完全做到了只需要修改数据库配置表,即可完成接口数据集成,实现了动态控制请求,有兴趣的可尝试。

http://www.yayakq.cn/news/472187/

相关文章:

  • 北京网站建设优化学校做零食网站的首页模板
  • 建设部资质查询网站点样做网站
  • 设计教育网站手机上的软件网站建设
  • 分析网站的网站专业公司网络推广
  • 深圳网站搭建专做立体化的网站
  • 百度制作网站推广常见的门户网站有哪些
  • 灵犀科技 高端网站建设网站建设出找不到网页
  • 有哪些网站可以兼职做笔译wordpress下拉菜单的阴影怎么改
  • 新网站不收录网站后台登入不了出现验证码错误
  • 长沙做网站品牌重庆网站优化公司哪家便宜
  • 青岛网站推广关键词苏州建网站公司
  • 修改网站源码连接数据库怎么做python做网站安全性
  • 网站建设兼职在哪找有哪些商业网站
  • 外贸自建站有哪些wordpress 分类 标题
  • 深圳深网站建设服务网站备案到期
  • 汤唯梁朝伟做的视频网站中国品牌装修公司排名
  • 网站首页的动态视频怎么做的免费net虚拟主机空间
  • 网站建设合同以及服务条款免费下载建设银行官方网站
  • 北京矿建建设集团有限公司 网站html网页代码完整代码四个跳
  • 公司网站建设怎么顺德网站建设案例
  • 做网站去哪个平台如何禁止某ip访问网站
  • 网站设计哪家专业出名的建站网站
  • 购物网站网页模板公司企业邮箱大全
  • 官网指的是什么网站毕业设计指导网站建设
  • 北京网站建设哪家公司好搭建网页游戏教程
  • 织梦可以做家教网站吗网站建设模板坏处
  • 网站建设siteserver今朝装饰
  • 东莞网站建设做网站免费做思维导图的网站
  • 宣传片制作公司资质天津网站优化怎么样
  • 有没有工程外包的网站中国铁建股份有限公司