This commit is contained in:
tanghc
2021-03-25 17:16:34 +08:00
parent 842f3a2ae5
commit f753faed66
4 changed files with 67 additions and 13 deletions

View File

@@ -56,6 +56,8 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
private final Map<MethodParameter, HandlerMethodArgumentResolver> argumentResolverCache = new ConcurrentHashMap<>(256);
private static List<MethodParameter> NEED_INIT_OPEN_CONTEXT = new ArrayList<>(16);
private ParamValidator paramValidator = new ServiceParamValidator();
private static Class<?> pushBuilder;
@@ -89,8 +91,8 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
return false;
}
Class<?> paramType = methodParameter.getParameterType();
// 排除的
boolean exclude = (
// 特殊参数
boolean special = (
WebRequest.class.isAssignableFrom(paramType) ||
ServletRequest.class.isAssignableFrom(paramType) ||
MultipartRequest.class.isAssignableFrom(paramType) ||
@@ -107,12 +109,17 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
OutputStream.class.isAssignableFrom(paramType) ||
Writer.class.isAssignableFrom(paramType)
);
// 除此之外都匹配
boolean support = !exclude;
if (support) {
this.wrapSingleParam(methodParameter, open);
// 特殊参数只需要初始化OpenContext
if (special) {
NEED_INIT_OPEN_CONTEXT.add(methodParameter);
}
return support;
this.wrapSingleParam(methodParameter, open);
return true;
}
private boolean isOnlyInitOpenContext(MethodParameter methodParameter) {
return NEED_INIT_OPEN_CONTEXT.contains(methodParameter);
}
/**
@@ -136,6 +143,20 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
, NativeWebRequest nativeWebRequest
, WebDataBinderFactory webDataBinderFactory
) throws Exception {
// 特殊参数只需要初始化OpenContext
if (isOnlyInitOpenContext(methodParameter)) {
this.initOpenContextImpl(nativeWebRequest);
HandlerMethodArgumentResolver resolver = getOtherArgumentResolver(methodParameter);
if (resolver != null) {
return resolver.resolveArgument(
methodParameter
, modelAndViewContainer
, nativeWebRequest
, webDataBinderFactory
);
}
return null;
}
nativeWebRequest = new SopServletWebRequest(
(HttpServletRequest) nativeWebRequest.getNativeRequest(),
(HttpServletResponse) nativeWebRequest.getNativeResponse()
@@ -170,6 +191,14 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
return null;
}
private OpenContextImpl initOpenContextImpl(NativeWebRequest nativeWebRequest) {
HttpServletRequest request = (HttpServletRequest) nativeWebRequest.getNativeRequest();
ServiceContext currentContext = ServiceContext.getCurrentContext();
JSONObject requestParams = OpenUtil.getRequestParams(request);
OpenContextImpl openContext = new OpenContextImpl(requestParams);
currentContext.setOpenContext(openContext);
return openContext;
}
/**
* 获取参数对象将request中的参数绑定到实体对象中去
@@ -180,11 +209,10 @@ public class ApiArgumentResolver implements SopHandlerMethodArgumentResolver {
*/
protected Object getParamObject(MethodParameter methodParameter, NativeWebRequest nativeWebRequest) {
HttpServletRequest request = (HttpServletRequest) nativeWebRequest.getNativeRequest();
ServiceContext currentContext = ServiceContext.getCurrentContext();
JSONObject requestParams = OpenUtil.getRequestParams(request);
OpenContextImpl openContext = new OpenContextImpl(requestParams);
currentContext.setOpenContext(openContext);
String bizContent = requestParams.getString(ParamNames.BIZ_CONTENT_NAME);
OpenContextImpl openContext = initOpenContextImpl(nativeWebRequest);
Map<String, Object> requestParams = openContext.getParameterMap();
Object bizObj = requestParams.get(ParamNames.BIZ_CONTENT_NAME);
String bizContent = bizObj == null ? null : bizObj.toString();
if (bizContent == null) {
return null;
}