一. 序言
在一个web程序中,当一个HTTP请求进来时,会被容器处理进而转换成一个servlet请求。http请求所携带的数据,虽然是格式化的但是无类型;而java作为强类型语言,同时为了健壮性考虑,必然要有完善的类型约束。当然,那么,将数据从servlet请求中转换到java中,一个很原始的方式是手动处理。
在SpringMvc除了能够将参数对象中的参数填充外 还可以利用ArgumentsResolver进行一些非参数映射得到所需要的对象.下面简单介绍其中使用方法。
二. 使用方法
1.我们需要在redis中查询出该MiaoshaUser 并且传递给Controller中的方法
@RequestMapping("/to_list")
public String toGoodsList(Model model , MiaoshaUser miaoshaUser){
return "goods_list";
}
2. 创建相应的配置类
@Configuration
public class MvcConfiguration extends WebMvcConfigurerAdapter {
@Autowired
private UserArgumentsResolver userArgumentsResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers){
resolvers.add(userArgumentsResolver);
}
}
3.实现ArgumentResolver
@Component //必须实现HandlerMethodArgumentResolver
public class UserArgumentsResolver implements HandlerMethodArgumentResolver {
@Autowired
private MiaoshaUserService userService;
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
Class<?> clazz = methodParameter.getParameterType();
return clazz == MiaoshaUser.class; //满足该条件进行参数填充
}
@Override
public Object resolveArgument(MethodParameter methodParameter,
ModelAndViewContainer modelAndViewContainer,
NativeWebRequest nativeWebRequest,
WebDataBinderFactory webDataBinderFactory) throws Exception {
//获取相关参数
return userService.getAndRefreshMiaoshaUser(token); //调用服务完成参数填充
}
}