SpringMVC之HandlerMethodArgumentResolver和注解

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

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



配置如下:

        
	  
	    
	  
	  


Java注解如下:

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

}



Resolver如下:

public class LoginedArgumentResolver implements HandlerMethodArgumentResolver {
    
    /**
     * 
     * @see org.springframework.web.method.support.HandlerMethodArgumentResolver#supportsParameter(org.springframework.core.MethodParameter)
     */
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        
        if (parameter.getParameterAnnotation(CurrentUser.class) != null
                && parameter.getParameterType() == User.class){
            return true;
        }
        return false;
    }
    
    /**
     * 
     * @see org.springframework.web.method.support.HandlerMethodArgumentResolver#resolveArgument(org.springframework.core.MethodParameter, org.springframework.web.method.support.ModelAndViewContainer, org.springframework.web.context.request.NativeWebRequest, org.springframework.web.bind.support.WebDataBinderFactory)
     */
    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
            NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

        HttpServletRequest request= (HttpServletRequest) webRequest.getNativeRequest();
        User user = (User)request.getSession().getAttribute("loginUser");
        return user;
    }

}







你可能感兴趣的:(SpringMVC)