Browse Source

【升级】增加一个json请求参数的临时缓存功能

fengshuonan 4 years ago
parent
commit
14c0ecec54

+ 24 - 4
guns-base-support/guns-core/src/main/java/cn/stylefeng/guns/core/web/GunsRequestResponseBodyMethodProcessor.java

@ -1,9 +1,13 @@
package cn.stylefeng.guns.core.web;
import cn.stylefeng.guns.core.context.param.RequestParamContext;
import org.springframework.core.Conventions;
import org.springframework.core.MethodParameter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.lang.Nullable;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
@ -27,11 +31,27 @@ public class GunsRequestResponseBodyMethodProcessor extends RequestResponseBodyM
    public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
                                  NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception {
        Object paramResult = super.resolveArgument(parameter, mavContainer, webRequest, binderFactory);
        parameter = parameter.nestedIfOptional();
        Object arg = readWithMessageConverters(webRequest, parameter, parameter.getNestedGenericParameterType());
        // 临时缓存一下@RequestBody注解上的参数
        RequestParamContext.setObject(paramResult);
        return paramResult;
        RequestParamContext.setObject(arg);
        String name = Conventions.getVariableNameForParameter(parameter);
        if (binderFactory != null) {
            WebDataBinder binder = binderFactory.createBinder(webRequest, arg, name);
            if (arg != null) {
                validateIfApplicable(binder, parameter);
                if (binder.getBindingResult().hasErrors() && isBindExceptionRequired(binder, parameter)) {
                    throw new MethodArgumentNotValidException(parameter, binder.getBindingResult());
                }
            }
            if (mavContainer != null) {
                mavContainer.addAttribute(BindingResult.MODEL_KEY_PREFIX + name, binder.getBindingResult());
            }
        }
        return adaptArgumentIfNecessary(arg, parameter);
    }
}