SpringMvc中 ArgumentResolver自定义参数

本文介绍如何在SpringMVC中使用自定义的ArgumentsResolver来处理HTTP请求中的参数,通过创建UserArgumentsResolver实现HandlerMethodArgumentResolver接口,从Redis中获取MiaoshaUser并传递给Controller。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 序言

    在一个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); //调用服务完成参数填充
    }
}

三.结果 成功传入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值