SpringMVC HandlerMethodArgumentResolver请求对应处理器方法参数的解析过程

通过调用argumentResolvers.supportsParameter这个方法来判断HandlerMethodArgumentResolver的实现类是否支持对应的参数的解析,和resolveArgument方法来实现真正的参数解析。

所以我们先看一下ServletRequestMethodArgumentResolver这个类中的supportsParameter这个方法的内容:

@Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.hasParameterAnnotation(AutowiredParams.class);
    }

从上面的代码中我们可以看到如果控制器中的参数使用@AutowiredParams进行注解的话,则使用这个参数解析器进行参数的解析,下面我们在看一下ServletRequestMethodArgumentResolver是怎么进行参数解析工作的:

@Override
    public Object resolveArgument(MethodParameter parameter,
            ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
            WebDataBinderFactory binderFactory) throws Exception {
    	
    	Object resBean = null;
        try {
            HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
            resBean = com.zhang.oa.utils.Params.getInstanceFromRequest(request);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resBean;
    }从

代码非常简单,其中 com.zhang.oa.utils.Params是自己开发的一个类型,这段代码就是将HttpServletRequest中的参数转换成我们需要的类型,最后将转换后的对象返回就可以了。

除此之外,我们还需要开发一个接口,该接口就是hasParameterAnnotation指定的接口。

package com.zhang.oa.paramresolver;
import java.lang.annotation.*;

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AutowiredParams {

}

这样就可以在控制器中通过使用@AutowiredParams的形式来使用。控制器代码如下。

@RequestMapping(value="/mobile/oa/jysqList",produces = {"application/json;charset=UTF-8"})
	@ResponseBody
	public String jysqList(@AutowiredParams Params params) {
		return jyServer.jysqList(params);
	}

其中Params是我们自定义的类型,你可以根据需求进行修改。 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值