mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 21:57:56 +08:00
新增restful模式
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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());
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取上传文件内容
|
* 获取上传文件内容
|
||||||
*
|
*
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user