cn.jiangzeyin.common.interceptor.BaseDefaultHandlerMethodArgumentResolver Maven / Gradle / Ivy
package cn.jiangzeyin.common.interceptor;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import cn.jiangzeyin.common.spring.SpringUtil;
import cn.jiangzeyin.common.validator.ValidatorConfig;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.annotation.ValueConstants;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.annotation.RequestParamMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
/**
* 默认的controller 方法参数解析器
* Created by jiangzeyin on 2018/8/24.
*
* @author jiangzeyin
*/
public abstract class BaseDefaultHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
private final ConfigurableApplicationContext context = (ConfigurableApplicationContext) SpringUtil.getApplicationContext();
private final RequestParamMethodArgumentResolver requestParamMethodArgumentResolver = new RequestParamMethodArgumentResolver(context.getBeanFactory(), false);
@Override
public boolean supportsParameter(MethodParameter parameter) {
return true;
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
Object object = requestParamMethodArgumentResolver.resolveArgument(parameter, mavContainer, webRequest, binderFactory);
if (object != null) {
return object;
}
ValidatorConfig validatorConfig = parameter.getParameterAnnotation(ValidatorConfig.class);
if (null == validatorConfig) {
return null;
}
String val = null;
// 自定义参数
String name = validatorConfig.name();
if (StrUtil.isNotEmpty(name)) {
val = webRequest.getParameter(name);
}
// 默认值
if (val == null) {
val = validatorConfig.defaultVal();
if (ValueConstants.DEFAULT_NONE.equals(val)) {
return null;
}
}
return Convert.convert(parameter.getParameterType(), val);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy