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

View File

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

View File

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

View File

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

View File

@@ -21,6 +21,8 @@ import java.net.InetAddress;
import java.net.URLDecoder;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -108,6 +110,17 @@ public class RequestUtil {
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.util.Locale;
import java.util.Map;
/**
* @author 六如
@@ -54,6 +55,11 @@ public class DefaultOpenContext extends OpenContext implements Serializable {
*/
private Locale locale;
/**
* 请求头
*/
private Map<String, String> headers;
public void initContext() {
this.setContext(this);
}

View File

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