# 前言
今天将 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();
    }
 2
3
4
5
6
7
8
9
10
11
12
13
这时我们的业务请求处理类继承自 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();
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
大家可以自己实现一下这些方法,然后就可以愉快的玩耍了,当然这里我写好了一个实现类,感兴趣的童靴可以看看。
BaseBizController.java (opens new window)