springMVC :HandlerMethodArgumentResolver+ 自定義註解,自定義解析器實現請求數據綁定方法入參

使用場景:

在接口請求的方法上添加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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章