diff --git a/pom.xml b/pom.xml index 47ca53c9..fdf8a063 100644 --- a/pom.xml +++ b/pom.xml @@ -87,6 +87,13 @@ ${roses.kernel.version} + + + cn.stylefeng.roses + validator-spring-boot-starter + ${roses.kernel.version} + + cn.stylefeng.roses diff --git a/src/main/java/cn/stylefeng/guns/config/validator/GunsValidator.java b/src/main/java/cn/stylefeng/guns/config/validator/GunsValidator.java deleted file mode 100644 index 2578d0d5..00000000 --- a/src/main/java/cn/stylefeng/guns/config/validator/GunsValidator.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.stylefeng.guns.config.validator; - -import cn.stylefeng.roses.kernel.validator.api.context.RequestGroupContext; -import lombok.extern.slf4j.Slf4j; -import org.springframework.validation.Errors; -import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; - -/** - * 用于真正校验参数之前缓存一下group的class类型 - *

- * 因为ConstraintValidator的自定义校验中获取不到当前进行的group - * - * @author fengshuonan - * @date 2020/8/12 20:07 - */ -@Slf4j -public class GunsValidator extends LocalValidatorFactoryBean { - - @Override - public void validate(Object target, Errors errors, Object... validationHints) { - - try { - if (validationHints.length > 0) { - - // 如果是class类型,利用ThreadLocal缓存一下class类型 - if (validationHints[0] instanceof Class) { - - // 临时保存group的class值 - RequestGroupContext.set((Class) validationHints[0]); - } - } - super.validate(target, errors, validationHints); - } finally { - RequestGroupContext.clear(); - } - } - -} diff --git a/src/main/java/cn/stylefeng/guns/config/validator/GunsValidatorRequestResponseBodyMethodProcessor.java b/src/main/java/cn/stylefeng/guns/config/validator/GunsValidatorRequestResponseBodyMethodProcessor.java deleted file mode 100644 index 1479db46..00000000 --- a/src/main/java/cn/stylefeng/guns/config/validator/GunsValidatorRequestResponseBodyMethodProcessor.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.stylefeng.guns.config.validator; - -import cn.stylefeng.roses.kernel.validator.api.context.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; -import org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor; - -import java.util.List; - -/** - * 拓展原有RequestResponseBodyMethodProcessor,只为缓存临时参数 - * - * @author fengshuonan - * @date 2020/8/21 20:51 - */ -public class GunsValidatorRequestResponseBodyMethodProcessor extends RequestResponseBodyMethodProcessor { - - public GunsValidatorRequestResponseBodyMethodProcessor(List> converters) { - super(converters); - } - - @Override - public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception { - - parameter = parameter.nestedIfOptional(); - Object arg = readWithMessageConverters(webRequest, parameter, parameter.getNestedGenericParameterType()); - - // 临时缓存一下@RequestBody注解上的参数 - 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); - } - -} diff --git a/src/main/java/cn/stylefeng/guns/config/validator/MethodArgumentResolverAutoConfiguration.java b/src/main/java/cn/stylefeng/guns/config/validator/MethodArgumentResolverAutoConfiguration.java deleted file mode 100644 index e8c95538..00000000 --- a/src/main/java/cn/stylefeng/guns/config/validator/MethodArgumentResolverAutoConfiguration.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.stylefeng.guns.config.validator; - -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.method.support.HandlerMethodArgumentResolver; -import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; - -import javax.annotation.PostConstruct; -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -/** - * 自定义的GunsRequestResponseBodyMethodProcessor,放在所有resolvers之前 - * - * @author fengshuonan - * @date 2020/8/21 21:09 - */ -@Configuration -@AutoConfigureBefore(ValidationAutoConfiguration.class) -public class MethodArgumentResolverAutoConfiguration { - - @Resource - private RequestMappingHandlerAdapter adapter; - - /** - * 自定义的spring参数校验器,重写主要为了保存一些在自定义validator中读不到的属性 - * - * @author fengshuonan - * @date 2020/8/12 20:18 - */ - @Bean - public GunsValidator gunsValidator() { - return new GunsValidator(); - } - - /** - * 自定义的GunsRequestResponseBodyMethodProcessor,放在所有resolvers之前 - * - * @author fengshuonan - * @date 2020/12/16 18:34 - */ - @PostConstruct - public void injectSelfMethodArgumentResolver() { - List argumentResolvers = new ArrayList<>(); - argumentResolvers.add(new GunsValidatorRequestResponseBodyMethodProcessor(adapter.getMessageConverters())); - argumentResolvers.addAll(Objects.requireNonNull(adapter.getArgumentResolvers())); - adapter.setArgumentResolvers(argumentResolvers); - } - -}