addArgumentResolvers
在SpringMVC
框架中,主要用于向Spring容器
注册自定义的参数解析器。在处理HTTP请求
时,SpringMVC
会使用这些参数解析器将请求中的数据(如查询参数、路径变量、表单数据等)转换并注入到控制器方法的参数中。
使用样例
第1步:自定义的Date参数解析器
public class CustomDateArgumentResolver implements HandlerMethodArgumentResolver {private static final String[] format = {"yyyy-MM-dd"};@Overridepublic boolean supportsParameter(MethodParameter parameter) {// 获取传入参数的类型Class<?> type = parameter.getParameterType();// 如果参数类型有为Student类的则符合,进入resolveArgument方法return Date.class == type;}@Overridepublic 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已有的参数解析器列表,用于处理控制器方法的参数解析工作*/@Overridepublic 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方法的使用