This commit is contained in:
tanghc
2021-06-16 17:44:39 +08:00
parent a16a7aa2d3
commit efe46ff3e1
3 changed files with 33 additions and 0 deletions

View File

@@ -51,6 +51,7 @@ import java.util.concurrent.ConcurrentHashMap;
@Slf4j @Slf4j
public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver { public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
private static final String HAS_INIT_OPEN_CONTEXT = "hasInitOpenContext";
private final Map<MethodParameter, HandlerMethodArgumentResolver> argumentResolverCache = new ConcurrentHashMap<>(256); private final Map<MethodParameter, HandlerMethodArgumentResolver> argumentResolverCache = new ConcurrentHashMap<>(256);
private static List<MethodParameter> NEED_INIT_OPEN_CONTEXT = new ArrayList<>(16); private static List<MethodParameter> NEED_INIT_OPEN_CONTEXT = new ArrayList<>(16);
@@ -163,10 +164,15 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
private OpenContextImpl initOpenContextImpl(NativeWebRequest nativeWebRequest) { private OpenContextImpl initOpenContextImpl(NativeWebRequest nativeWebRequest) {
HttpServletRequest request = (HttpServletRequest) nativeWebRequest.getNativeRequest(); HttpServletRequest request = (HttpServletRequest) nativeWebRequest.getNativeRequest();
Object hasInit = request.getAttribute(HAS_INIT_OPEN_CONTEXT);
if (hasInit != null) {
return (OpenContextImpl) ServiceContext.getCurrentContext().getOpenContext();
}
ServiceContext currentContext = ServiceContext.getCurrentContext(); ServiceContext currentContext = ServiceContext.getCurrentContext();
JSONObject requestParams = OpenUtil.getRequestParams(request); JSONObject requestParams = OpenUtil.getRequestParams(request);
OpenContextImpl openContext = new OpenContextImpl(requestParams); OpenContextImpl openContext = new OpenContextImpl(requestParams);
currentContext.setOpenContext(openContext); currentContext.setOpenContext(openContext);
request.setAttribute(HAS_INIT_OPEN_CONTEXT, true);
return openContext; return openContext;
} }

View File

@@ -35,6 +35,7 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.Min; import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@@ -136,6 +137,14 @@ public class Example1001_BaseController {
@Open("story.system.param.get4") @Open("story.system.param.get4")
@RequestMapping("/get/system/param/v4") @RequestMapping("/get/system/param/v4")
public Object addGoods3(HttpServletRequest request, StoryParam param) { public Object addGoods3(HttpServletRequest request, StoryParam param) {
param.setRemark(request.getRequestURI());
return param;
}
@Open("story.system.param.get5")
@RequestMapping("/get/system/param/v5")
public Object get5(HttpServletRequest request, HttpServletResponse response, StoryParam param) {
param.setRemark(request.getRequestURI() + ", getCharacterEncoding:" + response.getCharacterEncoding());
return param; return param;
} }

View File

@@ -422,6 +422,24 @@ public class AllInOneTest extends TestBase {
client.execute(requestBuilder); client.execute(requestBuilder);
} }
public void testParamBind2() {
Client.RequestBuilder requestBuilder = new Client.RequestBuilder()
.method("story.system.param.get5")
.version("1.0")
.bizContent(new BizContent().add("id", "1").add("name", "葫芦娃"))
.postJson(true)
.httpMethod(HttpTool.HTTPMethod.POST)
.callback((requestInfo, responseData) -> {
System.out.println(responseData);
String node = requestInfo.getDataNode();
JSONObject jsonObject = JSON.parseObject(responseData).getJSONObject(node);
Assert.assertEquals(1L, jsonObject.getLongValue("id"));
Assert.assertEquals("葫芦娃", jsonObject.getString("name"));
});
client.execute(requestBuilder);
}
/** /**
* 未知异常 * 未知异常
*/ */