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

怎么学网站建设东莞网站到首页排名

怎么学网站建设,东莞网站到首页排名,wordpress下拉式菜单,wordpress做企业官网好不好业务背景:在当前项目下,所有前端请求均通过外层网关转发到后端这边的dubbo服务,现计划去掉网关层,由前端直接http调用后端dubbo。 解决方案:在前端调用方式不变的前提下,后端服务新建controller层&#xf…

业务背景:在当前项目下,所有前端请求均通过外层网关转发到后端这边的dubbo服务,现计划去掉网关层,由前端直接http调用后端dubbo。

解决方案:在前端调用方式不变的前提下,后端服务新建controller层(原后端服务无任何controller),做统一请求兼容转发

package cn.***********.controller;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.utils.ReferenceConfigCache;
import org.apache.dubbo.rpc.service.GenericService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.List;
import java.util.Map;/*** Dubbo调用controller* @Version:1.0* @Desc*/
@Slf4j
@RestController
@RequestMapping("/api/test/")
public class GenericController {@PostMapping("/{service}/{method}")public Object invoke(HttpServletRequest request,@PathVariable("service") String service,@PathVariable("method") String method) {Object result;try {GenericService tarService = this.getTargetService(service);if(tarService ==  null){throw new RuntimeException("获取service失败");}// 1.解析传入参数String paramStr = this.parseInputStream(request);// 获取目标接口的 Class 对象Class<?> serviceInterface = Class.forName(service);// 获取方法的参数类型String[] parameterTypes = this.getMethodParameterTypes(serviceInterface, method);// 将 JSON 字符串转换为目标参数值Object[] parameters = this.convertParameters(paramStr, parameterTypes);// 调用方法result = tarService.$invoke(method, parameterTypes, parameters);} catch (Exception e) {log.error("服务调用失败, service={},method={}",service, method, e);throw new ErrorCodeException("000000", "系统异常,请稍后重试");}return result;}/*** 获取请求文本** @return*/public String parseInputStream(HttpServletRequest request) {try {ServletInputStream inputStream = request.getInputStream();StringBuilder content = new StringBuilder();int size = request.getContentLength();byte[] b = new byte[size];int lens;while ((lens = inputStream.read(b)) > 0) {content.append(new String(b, 0, lens, "utf-8"));}return content.toString();} catch (IOException e) {log.error("请求报文解析失败", e);throw new RuntimeException("请求报文解析异常");}}/*** 获取目标dubbo服务* @params [service]* @return org.apache.dubbo.rpc.service.GenericService* @desc*/private GenericService getTargetService(String service){// 应用信息ApplicationConfig application = SpringBeanUtils.getBean(ApplicationConfig.class);// 注册中心发现RegistryConfig registry = SpringBeanUtils.getBean(RegistryConfig.class);// 引用远程服务ReferenceConfig<GenericService> reference = new ReferenceConfig<>();reference.setApplication(application);reference.setRegistry(registry);reference.setProtocol("dubbo");reference.setInterface(service);reference.setTimeout(10000);reference.setRetries(0);// 声明为泛化接口reference.setGeneric(true);ReferenceConfigCache cache = ReferenceConfigCache.getCache();GenericService genericService = cache.get(reference);if(genericService == null){genericService = reference.get();}return genericService;}/*** 将 JSON 字符串转换为目标参数值* @params [paramStr, parameterTypes]* @return java.lang.Object[]* @author wu.zeng* @date 2025/2/21 13:44* @desc*/private Object[] convertParameters(String paramStr, String[] parameterTypes) {Object[] parameters = new Object[parameterTypes.length];for (int i = 0; i < parameterTypes.length; i++) {String paramType = parameterTypes[i];switch (paramType) {case "java.lang.String":parameters[i] = paramStr;break;case "java.lang.Integer":parameters[i] = Integer.parseInt(paramStr);break;case "java.lang.Long":parameters[i] = Long.parseLong(paramStr);break;case "java.util.Map":parameters[i] = JSON.parseObject(paramStr, new TypeReference<Map<String, Object>>() {});break;case "java.util.List":parameters[i] = JSON.parseObject(paramStr, new TypeReference<List<Object>>() {});break;default:// 如果是自定义类型,使用反射或 JSON 反序列化try {Class<?> clazz = Class.forName(paramType);parameters[i] = JSON.parseObject(paramStr, clazz);} catch (ClassNotFoundException e) {throw new RuntimeException("不支持的类型: " + paramType, e);}}}return parameters;}/** 获取目标方法的参数类型* @params [serviceInterface, methodName]* @return java.lang.String[]* @desc*/public String[] getMethodParameterTypes(Class<?> serviceInterface, String methodName) {for (Method method : serviceInterface.getMethods()) {// 由于不支持重载,因此这里可以根据 methodName 来匹配方法if (method.getName().equals(methodName)) {Parameter[] parameters = method.getParameters();String[] parameterTypes = new String[parameters.length];for (int i = 0; i < parameters.length; i++) {parameterTypes[i] = parameters[i].getType().getName();}return parameterTypes;}}throw new RuntimeException("方法未找到: " + methodName);}
}


文章转载自:

http://E2KOkUci.fLLfz.cn
http://mBlB62K7.fLLfz.cn
http://0BNeFo8E.fLLfz.cn
http://JBJRRHqM.fLLfz.cn
http://ZE9sluK8.fLLfz.cn
http://AHoZCPgt.fLLfz.cn
http://ExsTXEuY.fLLfz.cn
http://mEvu9r3K.fLLfz.cn
http://V9qWSQg6.fLLfz.cn
http://9FQmabMW.fLLfz.cn
http://2ZY5OqXV.fLLfz.cn
http://c8k2Bpa3.fLLfz.cn
http://z88kY2KS.fLLfz.cn
http://X9osjiiM.fLLfz.cn
http://jK4KCkXk.fLLfz.cn
http://GjWfuhnR.fLLfz.cn
http://D6B4iCzx.fLLfz.cn
http://qwxpQVXC.fLLfz.cn
http://NFDoy4wE.fLLfz.cn
http://LbM7cZyr.fLLfz.cn
http://OXERY6Vv.fLLfz.cn
http://twFgR2Fy.fLLfz.cn
http://uubORmkP.fLLfz.cn
http://iLLfeR0V.fLLfz.cn
http://7v6sPM4H.fLLfz.cn
http://HNQWpQpc.fLLfz.cn
http://MyvrKfmW.fLLfz.cn
http://4z4mQ2cr.fLLfz.cn
http://b1nHlmAm.fLLfz.cn
http://q9GxowSU.fLLfz.cn
http://www.dtcms.com/wzjs/772214.html

相关文章:

  • 怎么做有优惠券的网站浙江建设信息港网站考试成绩查询
  • 信用网站建设工作总结贺兰县住房城乡建设局网站
  • 设计类什么专业最挣钱seo推广有用吗
  • 国家小城镇建设政策网站wordpress阅读
  • 惠州惠阳网站建设淘宝网页版电脑版登录淘宝网
  • php网站建设入门教程企业培训考试系统题库
  • 律师事务所网站方案中国苏州网
  • 红色系网站企业网络推广做网站推广公司
  • 阳江做网站多少钱前端网站效果有哪些
  • 网站建设类文章要发多少片硬件开发需求
  • 域名到期对网站影响只做dnf的网站
  • 鹤壁 网站建设大学网站建设的目标
  • 绍兴市越城区建设局网站蓝色通用营销型企业网站模板
  • 传奇网站建设莱芜雪野湖自驾游攻略
  • 云南网站建设是什么o2o商超网站建设
  • 网站建设成本预测表怎么提高网站排名
  • 功能型网站 设计wordpress导出html代码
  • 手机智能建网站博客网站开发
  • 专业做装修的网站中国工业设计公司排名前十强
  • 易优建站系部网站建设方案
  • 天涯网站怎么做外链做app和网站怎样
  • 建筑施工单位网站网站开发需求大厅
  • 网站建设厘金手指下拉15黄页网址18岁以下勿入免费
  • 江西建设三类人员网站合肥装饰公司做的好的网站
  • 地方网站方案百度图片搜索
  • 西昌市规划建设局网站建立网站买空间哪家好
  • 海外产品网站建设photoshop制作网站
  • 东莞制作网站公司淘宝联盟上怎么建设网站
  • 中英文切换网站模板广州做网站好的公司
  • 温州优化网站临沂科技网站建设