新增restful模式

This commit is contained in:
六如
2025-02-02 16:37:12 +08:00
parent ddc709ede4
commit 10b060255c
7 changed files with 50 additions and 2 deletions

View File

@@ -1,9 +1,12 @@
package com.sop.example.rest.examplerest.rest.impl; package com.sop.example.rest.examplerest.rest.impl;
import com.gitee.sop.support.context.OpenContext;
import com.sop.example.rest.examplerest.rest.GoodsController; import com.sop.example.rest.examplerest.rest.GoodsController;
import com.sop.example.rest.examplerest.rest.vo.GoodsVO; import com.sop.example.rest.examplerest.rest.vo.GoodsVO;
import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.DubboService;
import java.util.Map;
/** /**
* @author 六如 * @author 六如
@@ -15,6 +18,10 @@ public class GoodsControllerImpl implements GoodsController {
GoodsVO goodsVO = new GoodsVO(); GoodsVO goodsVO = new GoodsVO();
goodsVO.setId(id); goodsVO.setId(id);
goodsVO.setName("冰箱"); goodsVO.setName("冰箱");
Map<String, String> headers = OpenContext.current().getHeaders();
String token = headers.get("token");
System.out.println(token);
return goodsVO; return goodsVO;
} }
} }

View File

@@ -6,6 +6,7 @@ import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
/** /**
* @author 六如 * @author 六如
@@ -50,4 +51,9 @@ public class ApiRequestContext {
* 原始参数 * 原始参数
*/ */
private JSONObject rawParams; private JSONObject rawParams;
/**
* 请求头
*/
private Map<String, String> headers;
} }

View File

@@ -93,9 +93,11 @@ public class ParamExecutorImpl implements ParamExecutor<HttpServletRequest, Http
.uploadContext(uploadContext) .uploadContext(uploadContext)
.traceId(UUID.randomUUID().toString().replace("-", "")) .traceId(UUID.randomUUID().toString().replace("-", ""))
.rawParams(params) .rawParams(params)
.headers(RequestUtil.getHeaders(request))
.build(); .build();
} }
protected String getTag(HttpServletRequest request) { protected String getTag(HttpServletRequest request) {
return request.getHeader(apiConfig.getHeaderKeyTag()); return request.getHeader(apiConfig.getHeaderKeyTag());
} }

View File

@@ -27,6 +27,7 @@ import com.gitee.sop.support.dto.FileData;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.ClassUtils; import org.apache.dubbo.common.utils.ClassUtils;
import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.rpc.RpcContext;
import org.apache.dubbo.rpc.RpcContextAttachment;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
@@ -100,13 +101,14 @@ public class RouteServiceImpl implements RouteService {
protected Object doRoute(ApiRequestContext apiRequestContext, ApiInfoDTO apiInfo) { protected Object doRoute(ApiRequestContext apiRequestContext, ApiInfoDTO apiInfo) {
String tag = apiRequestContext.getTag(); String tag = apiRequestContext.getTag();
// 设置隔离环境 // 设置隔离环境
RpcContextAttachment clientAttachment = RpcContext.getClientAttachment();
if (StringUtils.hasText(tag)) { if (StringUtils.hasText(tag)) {
RpcContext.getClientAttachment().setAttachment(SopConstants.DUBBO_TAG, tag); clientAttachment.setAttachment(SopConstants.DUBBO_TAG, tag);
} }
String paramInfo = apiInfo.getParamInfo(); String paramInfo = apiInfo.getParamInfo();
List<ParamInfoDTO> paramInfoList = JSON.parseArray(paramInfo, ParamInfoDTO.class); List<ParamInfoDTO> paramInfoList = JSON.parseArray(paramInfo, ParamInfoDTO.class);
OpenContext openRequest = buildOpenContext(apiRequestContext); OpenContext openRequest = buildOpenContext(apiRequestContext);
RpcContext.getClientAttachment().setAttachment(SopConstants.OPEN_CONTEXT, JSON.toJSONString(openRequest)); clientAttachment.setAttachment(SopConstants.OPEN_CONTEXT, JSON.toJSONString(openRequest));
return genericServiceInvoker.invoke( return genericServiceInvoker.invoke(
apiInfo.getInterfaceClassName(), apiInfo.getInterfaceClassName(),
apiInfo.getMethodName(), apiInfo.getMethodName(),
@@ -201,6 +203,7 @@ public class RouteServiceImpl implements RouteService {
defaultOpenRequest.setNotifyUrl(apiRequest.getNotifyUrl()); defaultOpenRequest.setNotifyUrl(apiRequest.getNotifyUrl());
defaultOpenRequest.setTraceId(apiRequestContext.getTraceId()); defaultOpenRequest.setTraceId(apiRequestContext.getTraceId());
defaultOpenRequest.setLocale(apiRequestContext.getLocale()); defaultOpenRequest.setLocale(apiRequestContext.getLocale());
defaultOpenRequest.setHeaders(apiRequestContext.getHeaders());
defaultOpenRequest.initContext(); defaultOpenRequest.initContext();
return defaultOpenRequest; return defaultOpenRequest;

View File

@@ -21,6 +21,8 @@ import java.net.InetAddress;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Enumeration;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -108,6 +110,17 @@ public class RequestUtil {
return jsonObject; return jsonObject;
} }
public static Map<String, String> getHeaders(HttpServletRequest request) {
Enumeration<String> headerNames = request.getHeaderNames();
Map<String, String> headers = new LinkedHashMap<>();
if (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String value = request.getHeader(name);
headers.put(name, value);
}
return headers;
}
/** /**
* 获取上传文件内容 * 获取上传文件内容
* *

View File

@@ -5,6 +5,7 @@ import lombok.EqualsAndHashCode;
import java.io.Serializable; import java.io.Serializable;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
/** /**
* @author 六如 * @author 六如
@@ -54,6 +55,11 @@ public class DefaultOpenContext extends OpenContext implements Serializable {
*/ */
private Locale locale; private Locale locale;
/**
* 请求头
*/
private Map<String, String> headers;
public void initContext() { public void initContext() {
this.setContext(this); this.setContext(this);
} }

View File

@@ -3,6 +3,7 @@ package com.gitee.sop.support.context;
import com.alibaba.ttl.TransmittableThreadLocal; import com.alibaba.ttl.TransmittableThreadLocal;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
/** /**
* @author 六如 * @author 六如
@@ -51,10 +52,20 @@ public abstract class OpenContext {
*/ */
public abstract Locale getLocale(); public abstract Locale getLocale();
/**
* 获取请求头
*/
public abstract Map<String, String> getHeaders();
protected void setContext(OpenContext openContext) { protected void setContext(OpenContext openContext) {
THREAD_LOCAL.set(openContext); THREAD_LOCAL.set(openContext);
} }
/**
* 获取当前OpenContext
*
* @return 返回OpenContext
*/
public static OpenContext current() { public static OpenContext current() {
return THREAD_LOCAL.get(); return THREAD_LOCAL.get();
} }