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

佛山门户网站建设公司qq推广开通

佛山门户网站建设公司,qq推广开通,自建app平台,平台设计与开发1、背景#xff1a;假设目前有两个接口#xff0c;一个是查询快递订单状态的JSF接口#xff0c;一个是查询快运订单状态的JSF接口#xff0c;现有一个需求#xff0c;要将这两个接口统一为一个入口#xff0c;发布到物流开放平台供外界调用。 注意#xff1a;以下代码均…1、背景假设目前有两个接口一个是查询快递订单状态的JSF接口一个是查询快运订单状态的JSF接口现有一个需求要将这两个接口统一为一个入口发布到物流开放平台供外界调用。 注意以下代码均为示例代码仅供参考具体值均无任何业务含义。 2、实现将两个原有JSF接口所有入参和出参做融合并增加一个业务属性shunt做区分根据shunt来判断是快递的查询业务还是快运的查询业务然后底层调用原有的JSF接口但是目前有一个问题是物流开放平台对外返回的code码是一套标准的code码而后端底层接口返回的code码则不符合平台标准所以要将JSF接口返回code码和物流开放平台的code码做映射以便符合物流开放平台的标准。 3、分析实现方式做映射的解决方案有很多 1枚举类增加一个枚举类增加三个属性分别是JSF接口返回的code和物流开放平台的code以及业务标识供后端接口返回的code相等但是对应的平台code不同时使用并提供传入JSF接口code获取平台code的方法供全局调用这样有一个弊端就是一旦有新增的code码就要重新修改代码重新上线。 package com.xx.xxxxxx.constant;/*** 融合映射状态码*/ public enum OrderCodeEnum {/*** bizCode 1 通用下单业务码*/ORDER_CODE_2202(2202, 1000002, 1),ORDER_CODE_2204(2204, 1000004, 1),ORDER_CODE_2225(2225, 1000025, 1),ORDER_CODE_2290(2290, 1000090, 1),ORDER_CODE_2291(2291, 1000091, 1);/*** JSF接口code*/private Integer code;/*** 物流开放平台code*/private Integer platformCode;/*** 业务标识*/private Integer bizCode;OrderCodeEnum(Integer code, Integer platformCode, Integer bizCode) {this.code code;this.platformCode platformCode;this.bizCode bizCode;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code code;}public Integer getPlatformCode() {return platformCode;}public void setPlatformCode(Integer platformCode) {this.platformCode platformCode;}public Integer getBizCode() {return bizCode;}public void setBizCode(Integer bizCode) {this.bizCode bizCode;}/*** 根据JSF code获取平台code* param bizCode 业务标识* param code JSF code* return 平台code*/public static Integer getValue(Integer bizCode, Integer code) {OrderCodeEnum[] orderCodeEnums values();for (OrderCodeEnum orderCodeEnum : orderCodeEnums) {if (!orderCodeEnum.bizCode.equals(bizCode)) {continue;}if(!orderCodeEnum.code.equals(code)) {continue;}return orderCodeEnum.getPlatformCode();}return null;} }2ducc配置配置类在ducc的配置类中新增一个属性然后将JSF接口code和平台code映射关系配置到配置文件或ducc配置平台在类加载的时候set注入到配置类的该属性中供全局使用这样后续添加新映射关系的时候可以通过修改配置文件或者ducc平台配置即可这样是一个很好的解决方案但是有一个弊端当映射关系特别多的时候由于配置的是一个字符串后续增加可能会配置错误导致解析失败还有可能长度超出限制。 具体如何添加参考文章将配置读注入到配置类的属性中供全局使用【开发记录】 3这也是本篇的核心解析配置文件注入到配置类属性中供全局使用优点解析的配置文件的格式很清晰一目了然后续扩展不会配置错误没有长度限制后续扩展无需修改代码配置类提供静态方法一键调用避免每次还要依赖注入配置类再进行调用。 添加orderCode-config.json配置文件 {1000:1000,2000:2000,2001:2001,2002:2002,3000:4000,4000:4000,1000000:2400,1000001:2401,1000002:2402,1000003:2403,1000004:2404,1000005:2405,1000006:2406 }增加配置类并解析配置文件注入到属性中 package com.xx.xxxxxxx.config;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.xx.xxxxxxx.util.JsonFileLoadUtil; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils;import javax.annotation.PostConstruct; import java.util.HashMap; import java.util.Map;/*** 接口返回状态码和物流开放平台对外状态码映射* author chenhongliang* date 2023.03.17 15:00:00* version 1.0*/Component public class OrderCodeConfig {private static final Logger logger LoggerFactory.getLogger(OrderCodeConfig.class);/*** key:后端的code码* value:物流开放平台标准的platformCode*/private final static MapString, String orderCodeMap new HashMap();PostConstructprivate void init() {String jsonStrByFile JsonFileLoadUtil.getJsonStrByFile(orderCode-config.json);MapString, String tempMap JSON.parseObject(jsonStrByFile, new TypeReferenceMapString, String() {});if (!CollectionUtils.isEmpty(tempMap)) {orderCodeMap.putAll(tempMap);}logger.info(加载配置文件完成 key size:{}, orderCodeMap.size());}/*** 通过后端接口返回的code码获取物流开放平台标准的platformCode* param code 接口返回的code* return 物流开放平台标准的platformCode*/public static String getByCode(String code) {if(StringUtils.isBlank(code) || MapUtils.isEmpty(orderCodeMap)) {return StringUtils.EMPTY;}return orderCodeMap.get(code);} }至此可以通过静态方法getByCode根据JSF接口code获取平台标准code。 贴一下相关Util代码 package com.xx.xxxxxxx.util;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StreamUtils;import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets;public class JsonFileLoadUtil {private static final Logger LOGGER LoggerFactory.getLogger(JsonFileLoadUtil.class);private JsonFileLoadUtil() {throw new IllegalStateException(Utility class);}/*** 读取json文件内容转为json字符串* param jsonFileName json文件名* return*/public static String getJsonStrByFile(String jsonFileName) {String jsonStr {};try (InputStream inputStream JsonFileLoadUtil.class.getClassLoader().getResourceAsStream(jsonFileName);) {jsonStr StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);} catch (IOException e) {LOGGER.error(未加载到配置文件{}, jsonFileName);}LOGGER.info(读取JSON配置文件完成jsonFileName{}, jsonStr:{}, jsonFileName, jsonStr);return jsonStr;} }
http://www.w-s-a.com/news/211590/

相关文章:

  • 企业网站建设流程步骤镇江东翔网络科技有限公司
  • 网络工程师和做网站哪个难网络建站如何建成
  • 网站建设需要哪些项目游民星空是用什么做的网站
  • 旅游网站建设要如何做百度商城网站建设
  • destoon 网站搬家中国企业500强都有哪些企业
  • 商城网站前端更新商品天天做吗哈尔滨做网站优化
  • 新乡网站开发wordpress 产品分类侧边栏
  • 网站自己做自己的品牌好做互联网企业分类
  • 项目网站建设方案石家庄网站快速排名
  • 网站开发大作业报告做电商网站的参考书
  • Apache局域网网站制作wordpress外链自动保存
  • 网站备案号要怎么查询千锋教育培训机构地址
  • 门户网站建设要求几款免费流程图制作软件
  • 花生壳域名可以做网站域名吗wordpress内链工具
  • 猎头公司网站模板网站伪静态作用
  • 工程建设教育网站html成品网页模板下载
  • 同一ip 网站 权重wordpress 菜单 小图标
  • 网站没有icp备案wordpress d8主题 4.1
  • 手机网站建设推荐企业宣传页模板
  • 杭州市富阳区建设局网站动态域名做网站
  • 网站如何免费做SEO优化靖安县城乡规划建设局网站
  • 室内设计网站平台学新媒体运营最好的培训学校
  • 招聘网站建设工作总结湘潭seo
  • 台山网站设计哈尔滨网站建设外包公司
  • 常州城投建设招标网站网页设计入门教学视频
  • 石家庄教育平台网站建设wordpress 访问量统计
  • 为什么买的网站模版不好用ftp网站建设
  • 做网站办公照片crm系统视频
  • 网站建设 招标文件南昌做网络推广的
  • 增城电子商务网站建设浙江省住房和城乡建设部网站