先引入一篇博客: https://www.cnblogs.com/java-zhao/p/9119258.html
关于处理使用@requstBody注解后自定义参数解析器,失败,原因是spring会使用自己默认的参数解析器来处理参数解析,上面这篇博客涉及了参数解析器的顺序
因此大部门都是采用自定义注解来实现的
我的业务场景:
对接第三方平台,别人调用我的接口,但是接口文档参数已经定好位有下划线的参数,觉得不规范,但是别人又不好修改,采用自定义注解+参数解析器来讲下划线的参数名称,转为驼峰命名参数接收
RequestMappingHandlerAdapter 中查看默认的参数解析器
通用自定义参数解析类,实现 HandlerMethodArgumentResolver 接口,同时交给spring回调,来实现目的
package com.wm.resolverstudy1.config;
import com.alibaba.fastjson.JSONObject;
import com.wm.resolverstudy1.annotation.RequestPropertiesBody;
import org.springframework.core.MethodParameter;
import org.springframework.objenesis.instantiator.util.ClassUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import sun.reflect.misc.FieldUtil;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* @author 半卷流年
* @date 2020-8-13 10:28
*/
public class RequestModelArgumentResolver implements HandlerMethodArgumentResolver {
private final Pattern underLinePattern = Pattern.compile("_(\\w)");
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(RequestPropertiesBody.class);
}
@Override
public Object resolveArgument(MethodParameter