码迷,mamicode.com
首页 > 编程语言 > 详细

springMVC自定义方法属性解析器

时间:2019-06-05 18:15:09      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:run   ide   native   hand   false   control   value   runtime   obj   

使用场景例子:

用户登陆系统一般会往Session里放置一个VO对象,然后在controller里会来获取用户的userId等信息。

之前的写法是:@SessionAttributes配合@ModelAttribute来进行参数值的注入,但这样需要写2个注解,其中SessionAttributes加在类上,ModelAttribute加在方法的属性上。

 

SpringMVC提供了HandlerMethodArgumentResolver接口来处理我们的自定义参数的解析。

例子:

1、获取用户信息的注解类

技术图片
import java.lang.annotation.*;

/**
 * <p>绑定当前登录的用户</p>
 * <p>不同于@ModelAttribute</p>
 */
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CurrentUser {

    /**
     * 当前用户在request中的名字
     *
     * @return
     */
    String value() default "loginUser";

}
技术图片

2、自定义的参数解析器

技术图片
import com.gongren.cxht.pay.web.shiro.bind.annotation.CurrentUser;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

/**
 * <p>自定义方法参数解析器
 */
public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {

    public CurrentUserMethodArgumentResolver() {
    }

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        if (parameter.hasParameterAnnotation(CurrentUser.class)) {
            return true;
        }
        return false;
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        CurrentUser currentUserAnnotation = parameter.getParameterAnnotation(CurrentUser.class);
        //从session的scope里取CurrentUser注解里的value属性值的key的value
        return webRequest.getAttribute(currentUserAnnotation.value(), NativeWebRequest.SCOPE_SESSION);
    }
}
技术图片

3、将自定义的解析器加入springmvc的配置文件里

<mvc:annotation-driven>
     <mvc:argument-resolvers>
        <!-- SESSION USER -->
        <bean class="com.test.CurrentUserMethodArgumentResolver"/>
    </mvc:argument-resolvers>
</mvc:annotation-driven>

在controller里的使用方法:

@RequestMapping(value = "/test")
public String test(@CurrentUser AccUserVo user) {
    
}    
转自 https://www.cnblogs.com/yangzhilong/p/6282218.html

springMVC自定义方法属性解析器

标签:run   ide   native   hand   false   control   value   runtime   obj   

原文地址:https://www.cnblogs.com/xd502djj/p/10980958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!