前言
今天将 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();
大家可以自己实现一下这些方法,然后就可以愉快的玩耍了,当然这里我写好了一个实现类,感兴趣的童靴可以看看。
GitHub 地址
版权声明:本文为xiaoping0915原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。