前言
今天將 SpringBoot 更新到了最新的 release 版本,在一個請求方法中使用 @RequestParam
註解去獲取參數時,然後 @RequestParam
的 required 的缺省值是 true 的,如果這時候我們的請求表單是一個大表單的請求,感覺寫起這個參數列表不是很方便。當然我們可以將 HttpServletRequest
注入到請求方法中,然後手動入參,手動檢查參數,這樣做的好處是代碼閱讀起來比較方便。所以就需要一個 BaseController 來解決這些公共的問題。
@ModelAttribute
關於 @ModelAttribute
,被註解的方法或屬性會執行於 @RequestMapping
之前。
在控制器的處理器方法參數上添加 @ModelAttribute 註解可以訪問模型中的屬性,如果不存在這個模型,則會自動將其實例化,產生一個新的模型。 模型屬性還覆蓋了來自 HTTP Servlet 請求參數的名稱與字段名稱匹配的值。
所以我們可以利用 @ModelAttribute
的特性,將我們需要的 HttpServletRequest
和 HttpServletResponse
注入到所有的控制器中。
所以我們的 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();
大家可以自己實現一下這些方法,然後就可以愉快的玩耍了,當然這裏我寫好了一個實現類,感興趣的童靴可以看看。