addArgumentResolvers
在SpringMVC
框架中,主要用于向Spring容器
注册自定义的参数解析器。在处理HTTP请求
时,SpringMVC
会使用这些参数解析器将请求中的数据(如查询参数、路径变量、表单数据等)转换并注入到控制器方法的参数中。
使用样例
第1步:自定义的Date参数解析器
public class CustomDateArgumentResolver implements HandlerMethodArgumentResolver {
private static final String[] format = {"yyyy-MM-dd"};
@Override
public boolean supportsParameter(MethodParameter parameter) {
// 获取传入参数的类型
Class<?> type = parameter.getParameterType();
// 如果参数类型有为Student类的则符合,进入resolveArgument方法
return Date.class == type;
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
// 从请求中获取日期字符串,并转换为Date对象
return DateUtils.parseDate(webRequest.getParameter("date"), format);
}
}
第2步:向Spring容器注册自定义的参数解析器
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 向SpringMVC框架中添加自定义参数解析器
*
* @param argumentResolvers SpringMVC已有的参数解析器列表,用于处理控制器方法的参数解析工作
*/
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
// 添加一个自定义解析器,它能将请求中的字符串参数转换为Date类型,
// 例如:假设前端传递的是"2022-12-31"这样的日期字符串,通过此解析器可直接注入到控制器方法的Date类型参数中。
argumentResolvers.add(new CustomDateArgumentResolver());
}
}
第3步:使用
@Controller
public class CustomArgumentResolverController {
@GetMapping("/customDateArgumentResolver")
public String handleDate(Date date,Date date3) {
// 此处的date参数会由CustomDateArgumentResolver解析注入
System.out.println(date);
return "success";
}
}
遗留问题
http://localhost:8080/customDateArgumentResolver?date=2024-01-14&date2=2024-01-13
这种多参数解析没玩明白
参考
WebMvcConfigurer中addArgumentResolvers方法的使用