diff --git a/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/bean/OpenContextImpl.java b/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/bean/OpenContextImpl.java index dcc20ae6..bc3c4329 100644 --- a/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/bean/OpenContextImpl.java +++ b/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/bean/OpenContextImpl.java @@ -25,6 +25,10 @@ public class OpenContextImpl implements OpenContext { private JSONObject rootJsonObject; private T bizObject; + public OpenContextImpl(JSONObject rootJsonObject) { + this(rootJsonObject, null); + } + public OpenContextImpl(JSONObject rootJsonObject, Class bizClass) { this.rootJsonObject = rootJsonObject; if (bizClass != null) { diff --git a/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/interceptor/ServiceContextInterceptor.java b/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/interceptor/ServiceContextInterceptor.java index 7ff9495f..37b51fb6 100644 --- a/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/interceptor/ServiceContextInterceptor.java +++ b/sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/interceptor/ServiceContextInterceptor.java @@ -1,6 +1,12 @@ package com.gitee.sop.servercommon.interceptor; +import com.alibaba.fastjson.JSONObject; +import com.gitee.sop.servercommon.bean.OpenContext; +import com.gitee.sop.servercommon.bean.OpenContextImpl; import com.gitee.sop.servercommon.bean.ServiceContext; +import com.gitee.sop.servercommon.util.OpenUtil; +import lombok.Setter; +import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; @@ -9,15 +15,37 @@ import javax.servlet.http.HttpServletResponse; /** * @author tanghc */ +@Setter public class ServiceContextInterceptor extends HandlerInterceptorAdapter { + @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { ServiceContext context = ServiceContext.getCurrentContext(); context.setRequest(request); context.setResponse(response); + if (handler instanceof HandlerMethod) { + HandlerMethod handlerMethod = (HandlerMethod) handler; + // 修复方法参数个数为0,OpenContext获取null问题 + if (handlerMethod.getMethodParameters().length == 0) { + initOpenContext(request); + } + } return true; } + + /** + * 初始化OpenContext + * + * @param request request + */ + protected void initOpenContext(HttpServletRequest request) { + JSONObject requestParams = OpenUtil.getRequestParams(request); + OpenContext openContext = new OpenContextImpl(requestParams); + ServiceContext.getCurrentContext().setOpenContext(openContext); + } + + @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { ServiceContext.getCurrentContext().unset(); diff --git a/sop-example/sop-story/sop-story-web/src/main/java/com/gitee/sop/storyweb/controller/AlipayController.java b/sop-example/sop-story/sop-story-web/src/main/java/com/gitee/sop/storyweb/controller/AlipayController.java index b5e1ea49..d7b1aab9 100644 --- a/sop-example/sop-story/sop-story-web/src/main/java/com/gitee/sop/storyweb/controller/AlipayController.java +++ b/sop-example/sop-story/sop-story-web/src/main/java/com/gitee/sop/storyweb/controller/AlipayController.java @@ -109,6 +109,8 @@ public class AlipayController { @ApiAbility @GetMapping("getStory2") public Story getStory2_0() { + OpenContext openContext = ServiceContext.getCurrentContext().getOpenContext(); + System.out.println(openContext.getAppId()); Story story = new Story(); story.setId(1); story.setName("海底小纵队(默认版本号)");