SpringMVC之HandlerMethodArgumentResolver和<mvc:argument-resolvers>

SpringMVC提供了一个HandlerMethodArgumentResolver接口可以让我们处理方法的参数,和注解结合提来,能有很强大的功能,例如SpringMVC提供的@ModelAttribute就是通过这种方法来处理的,它有对应的实现HandlerMethodArgumentResolver接口的类----ModelAttributeMethodProcessor,通过这种方法来处理参数

我们也可以使用一个类实现HandlerMethodArgumentResolver,在<mvc:annotation-driven>的子标签<mvc:argument-resolvers>中配置好后,SpringMVC就会调用我们写的类,然后我们在里面进行对参数的处理就好了,简单的示例代码如下,下面的功能是使用一个自定义的Java注解,来给参数设置一个初始值

Java注解如下:

@Target(value=ElementType.PARAMETER)  
@Retention(RetentionPolicy.RUNTIME)    
public @interface ValueAnnotation {  
    public String value() default "";  
}  

Resolver如下:

public class MyResolver implements HandlerMethodArgumentResolver {  
  
    /* 
     * 返回false则不会进入到resolveArgument方法,返回true则会 
     */  
    @Override  
    public boolean supportsParameter(MethodParameter parameter) {  
        return parameter.hasParameterAnnotation(ValueAnnotation.class);  
    }  
  
    @Override  
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {  
        // 通过parameter获取参数上的Annotation  
        ValueAnnotation annotation = parameter.getParameterAnnotation(ValueAnnotation.class);  
        // 通过Annotation获取设置的值  
        String value = annotation.value();  
        // 将值返回给参数  
        return value;  
    }  
}  

Controller如下:

@Controller  
@RequestMapping("resolver")  
public class AnnotationAndResolverController {  
      
    @RequestMapping(value = "/test")  
    public void test(@ValueAnnotation("123") String value) {  
        System.out.println(value);  
    }  
  
}  

会打印出123

配置如下:

<mvc:argument-resolvers>  
    <bean class="resolver.MyResolver"/>  
    <bean class="resolver.MyModelAttributeResolver"/>  
</mvc:argument-resolvers>  

只是简单的写了个例子来记录用法,在resolveArgument里面可以做很多事,例如在里面可以利用parameter获取参数的Class对象,然后里面反射机制来处理数据,或者在里面进行验证参数是否非空,等等。

参考:

http://blog.csdn.net/u013160932/article/details/50609092

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值