Spring MVC(十三)--保存并获取属性参数

这里的属性参数主要是指通过request、session、cookie等设置的属性,有时候我们需要将一些请求的参数保存到HTTP的request或者session对象中去,在控制器中也会进行设置和获取操作,spring mvc使用注解的方式支持这些场景,主要的注解有以下几个:

  • @RequestAttribute:获取通过request对象设置的属性值;
  • @SessionAttribte:获取通过session对象设置的属性值;
  • @SessionAttributes:作用在类上,用来将获取的参数设置到session中,有name和type两个属性,当通过ModelAndView的addObject方法时就会根据名称或类型将对应的值设置到session中;
  • @CookieValue:获取保存在cookie中的属性值;
  • @RequestHeader:获取请求头中的相关信息;

下面一一介绍各注解的用法:

一、注解@RequestAttribute

因为是获取方法,所以先要通过页面设置一些属性。

1⃣️jsp中设置请求属性

<%
        request.setAttribute("username", "hello");
    request.setAttribute("msg", "World");
    request.getRequestDispatcher("./reqAttr").forward(request, response);
%> 

2⃣️在映射路径所在的控制器中获取

@RequestMapping("reqAttr")
    public ModelAndView getRequeParam(@RequestAttribute("username") String uname, @RequestAttribute("msg") String msg) {
        ModelAndView mv = new ModelAndView();
        System.out.println(uname + "----" + msg);
        mv.addObject("uname", uname);
        mv.addObject("msg", msg);
        mv.setViewName("jump/requestAttribute");
        return mv;
    }

上面红色加粗部分的代码就是获取通过request对象设置的属性值;

二、注解@SessionAttribte

1⃣️jsp中设置session属性

<body>

    <%
        session.setAttribute("session1", "sessionsddffdfd");
        response.sendRedirect("./getSession");
    %>
</body>

2⃣️在控制器中获取属性

@RequestMapping("getSession")
    public ModelAndView setSession(@SessionAttribute("testSession") String msg) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", msg);
        mv.setViewName("jump/testSession");
        return mv;
    }

红色加粗部分就是获取session属性的方法;

三、注解@SessionAttributes

这个注解只能作用在类上面,不能对方法和参数进行注解。

@SessionAttributes(names = { "params" }, types = { Param.class }) // 将param对象保存到session中

当在类上设置上述注解后,Spring MVC在执行完控制器逻辑后,就会将数据模型中对应的属性名称或属性类型保存到HTTP的session中,比如执行下面这个方法后:

    @RequestMapping("nextPage1")
    public ModelAndView nextPage(Param param) {
        ModelAndView mv = new ModelAndView();
        System.out.println("header-userAgent:" + userAgent + ";cookie-jessionId:" + jessonId);
        mv.addObject("params", param);
        mv.setViewName("jump/jump");
        return mv;
    }

上述方法中获取到了一个Param对象,当执行完这个方法之后,param对象就会被保存到session中,通过名称params就能获取到属性值;

四、注解@CookieValue

   @RequestMapping("nextPage1")
    public ModelAndView nextPage(@CookieValue(value = "JESSIONID", required = true, defaultValue = "MyJessionId") String jessonId,
            Param param) {
        ModelAndView mv = new ModelAndView();
        System.out.println("header-userAgent:" + userAgent + ";cookie-jessionId:" + jessonId);
        mv.addObject("params", param);
        mv.setViewName("jump/jump");
        return mv;
    }

上面红色加粗部分就是获取cookie值的方式;

五、注解@RequestHeader

@RequestMapping("nextPage1")
    public ModelAndView nextPage(@RequestHeader(value = "User-Agent", required = false, defaultValue = "attribute") String userAgent,
            Param param) {
        ModelAndView mv = new ModelAndView();
        System.out.println("header-userAgent:" + userAgent + ";cookie-jessionId:" + jessonId);
        mv.addObject("params", param);
        mv.setViewName("jump/jump");
        return mv;
    }

上面红色加粗部分就是获取HTTP请求头的方式;

原文地址:https://www.cnblogs.com/hellowhy/p/9746745.html