SpringBoot 雜記——使用 @ModelAttribute 抽象 BaseController(六)

前言

今天將 SpringBoot 更新到了最新的 release 版本,在一個請求方法中使用 @RequestParam 註解去獲取參數時,然後 @RequestParam 的 required 的缺省值是 true 的,如果這時候我們的請求表單是一個大表單的請求,感覺寫起這個參數列表不是很方便。當然我們可以將 HttpServletRequest 注入到請求方法中,然後手動入參,手動檢查參數,這樣做的好處是代碼閱讀起來比較方便。所以就需要一個 BaseController 來解決這些公共的問題。

@ModelAttribute

關於 @ModelAttribute,被註解的方法或屬性會執行於 @RequestMapping 之前。

在控制器的處理器方法參數上添加 @ModelAttribute 註解可以訪問模型中的屬性,如果不存在這個模型,則會自動將其實例化,產生一個新的模型。 模型屬性還覆蓋了來自 HTTP Servlet 請求參數的名稱與字段名稱匹配的值。

所以我們可以利用 @ModelAttribute 的特性,將我們需要的 HttpServletRequestHttpServletResponse 注入到所有的控制器中。

所以我們的 BaseController 中需要這個方法:

    protected HttpServletRequest request;

    protected HttpServletResponse response;

    protected HttpSession session;
    
    @ModelAttribute
    public void setBaseBizController(HttpServletRequest request,HttpServletResponse response){
        this.request=request;
        this.response=response;
        this.session=request.getSession();
    }

這時我們的業務請求處理類繼承自 BaseController 就可以在業務方法中直接使用 request response session 對象了。

封裝一些常用の方法

有了上面說的 request response session 對象之後,一切事情就變得順其自然了。

	/**
     * 獲取請求對象
     */
    HttpServletRequest getRequest();

    /**
     * 獲取響應對象
     */
    HttpServletResponse getResponse();

    /**
     * 獲取會話對象
     */
    HttpSession getSession();

    /**
     * 獲取請求Ip
     */
    String getIp();

    /**
     * 獲取參數
     * @param paramName 參數名
     */
    String getStringParam(String paramName);

    /**
     * 獲取參數
     * @param paramName 參數名
     * @param defaultValue 缺省值
     */
    String getStringParam(String paramName, String defaultValue);

    /**
     * 獲取並校驗參數非空
     * @param paramName 參數名
     */
    String requireStringParam(String paramName);

    /**
     * 獲取並校驗參數非空
     * @param paramName 參數名
     * @param tips 參數爲空自定義提示
     */
    String requireStringParam(String paramName, String tips);

    int getIntParam(String paramName);

    int getIntParam(String paramName, int defaultValue);

    int requireIntParam(String paramName);

    int requireIntParam(String paramName, String tipsEmpty, String tipsNaN);

    long getLongParam(String paramName);

    long getLongParam(String paramName, long defaultValue);

    long requireLongParam(String paramName);

    long requireLongParam(String paramName, String tipsEmpty, String tipsNaN);

    double getDoubleParam(String paramName);

    double getDoubleParam(String paramName, double defaultValue);

    double requireDoubleParam(String paramName);

    double requireDoubleParam(String paramName, String tipsEmpty, String tipsNaN);

    /**
     * 獲取請求參數map
     */
    Map getParamMap();

大家可以自己實現一下這些方法,然後就可以愉快的玩耍了,當然這裏我寫好了一個實現類,感興趣的童靴可以看看。

BaseBizController.java

GitHub 地址

PlayWithSpringBoot

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