springMVC :HandlerMethodArgumentResolver+ 自定义注解 实现的参数自动获取会话user数据

版权声明:本文为博主搜索整合文章。 https://blog.csdn.net/weixin_37794901/article/details/79834532

使用场景:

在接口请求的方法上添加bean参数user,在实际请求时不需要传数据,通过
HandlerMethodArgumentResolver 赋值到user;

sept1

package hotkidclub.base;


import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;


import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;


/**
 * 登录的会员(从会话取会员实例)
 * 
 * @author ming
 *
 */
@Documented
@Retention(RUNTIME)
@Target(PARAMETER)
public @interface LoggedinUser {

}

sept2



import javax.servlet.http.HttpServletRequest;
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;


/**
 * 登錄的的用户(從會話裡面取用户實例)
 */
public class LoggedinUserResolver implements HandlerMethodArgumentResolver {


@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory)
throws Exception {
Member result = null;
try {
HttpServletRequest request = (HttpServletRequest) nativeWebRequest.getNativeRequest();
if (request.getSession(false) != null) {
result = (User) request.getSession(false).getAttribute("user");
}
}
catch (Exception e) {
}
return result;
}


@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return methodParameter.getParameterType().equals(User.class);
}

}


xml配置:

<mvc:annotation-driven>
        <mvc:argument-resolvers>
            <bean class="mystudy.base.LoggedinUserResolver" />
        </mvc:argument-resolvers>
    </mvc:annotation-driven>

猜你喜欢

转载自blog.csdn.net/weixin_37794901/article/details/79834532