( 十七 )、SpringMVC 之 HandlerMethodArgumentResolver 自定义参数解析器
( 十七 )、SpringMVC 之 HandlerMethodArgumentResolver 自定义参数解析器
1、简介
HandlerMethodArgumentResolver 用于将方法参数解析为参数值的策略接口。源码如下:
public interface HandlerMethodArgumentResolver {
/**
* supportsParameter:用于判定是否需要处理该Controller方法的参数,
* 返回true为需要,并会去调用下面的方法resolveArgument。
* {@code false} otherwise
*/
boolean supportsParameter(MethodParameter parameter);
/**
* 真正用于处理参数的方法,返回的Object就是controller方法上的形参对象。
*/
@Nullable
Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception;
}
2、使用示例:
1、自定义 CustomerArgumentResolver
/**
* @Author dw
* @ClassName CustomerArgmentResovle
* @Description
* @Date 2022/1/9 19:07
* @Version 1.0
*/
public class CustomerArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return MyUser.class.isAssignableFrom(methodParameter.getParameterType());
}
@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer,
NativeWebRequest nativeWebRequest,
WebDataBinderFactory webDataBinderFactory) throws Exception {
MyUser myUser = new MyUser();
myUser.setUserName("王二麻子");
myUser.setUserAge(29);
return myUser;
}
}
2、在MvcConfig中 添加自定义的参数解析器:
/**
* @Author dw
* @ClassName MvcConfiguration
* @Description
* @Date 2022/1/9 19:16
* @Version 1.0
*/
@Configuration
public class MvcConfiguration implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new CustomerArgumentResolver());
}
}
3、测试:
3.1、新建MyUser:
@Data
public class MyUser {
private String userName;
private Integer userAge;
}
3.2 新建Controller:
/**
* @Author dw
* @ClassName CustomParamsResolverController
* @Description
* @Date 2022/1/9 19:18
* @Version 1.0
*/
@RestController
public class CustomParamsResolverController {
@RequestMapping("param")
public MyUser customParam(MyUser myUser){
System.out.println(myUser.toString());
return myUser;
}
}
测试结果: