springmvc 数据交互

一、Controller相关注解

    1、@Controller与@RestController注解

   ①@Controller:添加在Controller 类上,指定Spring类的实例是一个控制器。

   ②@RestController:添加在Controller 类上,是一个复合注解,它包含了@Controller和@ResponseBody注解,指定控制器内每个方法都是由@ResponseBody注解的。

    2、@RequestMapping注解

        @RequestMapping:映射请求到控制器的方法,可匹配属性url、HTTP method、request parameters、headers、media types等,常用属性如下:

   ①value属性

        说明:@RequestMapping注解的默认属性,支持使用通配符映射。

        用法1:@RequestMapping 添加在Controller类上,代表类中方法一个公共的访问路径。

        用法2:@RequestMapping(value="url")添加在方法上,其中value可以省略,允许多个url对应一个方法,格式为value={"url1","url2"}。

    ②method属性

       说明:请求方式限定

       @RequestMapping(method="method"),其中method可以省略(支持全部),同一方法允许多种访问方式,如method ={RequestMethod.GET,RequestMethod.POST},

       同样可以使用@GetMapping、@PostMapping、 @PutMapping、 @DeleteMapping、 @PatchMapping来精确映射。

    ③params属性

       说明:请求参数限定

       @RequestMapping(value="url",params={"username","password!=123456"})代表请求路径必须包含参数username,值不做要求,若包含参数password,值不能为123456。

    ④header属性

       说明请求头限定

       @RequestMapping(value = "getUser",headers = "Referer=http://www.test.com")代表仅接收header中Referer属性包含http://www.test.com的请求(Referer可用于防盗链,恶意请求等)。 

    ⑤consumers与produces属性

       说明:请求响应媒体类型限定

     3、@RequestParam注解    

          @RequestParam:用于将指定的请求参数赋值给方法中的形参,其中包含3个参数:

     ①value:请求参数(通常用于起别名)

     ②required:默认为true(请求参数不能为null),需设为false解除限制。

     ③defaultValue:参数为空的情况下,设置一个默认值(required自动设为 false)。

      4、@PathVariable注解

           @PathVariable:用来映射请求URL中绑定的占位符,并将对应参数绑定到controller处理方法的入参中。

       5、@RequestBody与@ResponseBody注解

             @RequestBody:作用在形参列表上,将前台发送过来的(json/xml)数据封装成javabean对象。

             @ResponseBody:作用在方法上的,将方法的返回值以特定格式(json/xml)写入返回体中,从而将数据返还给客户端,不会进行视图解析及渲染HTML模板。

二、Controller方法返回值

    1、ModelAndView

          通过创建ModelAndView 对象,存储处理完后的结果数据,以及显示该数据的视图,其中Model代表模型,View代表视图,例如:addObject()存储数据,setViewName()存储视图。

     2、String

           ①存储返回视图路径,通过形参Model对象携带数据,例如:addAttribute()以键值对形式存储数据(官方推荐方法,符合解耦思想)。

           ②return "forward:url";实现转发

           ③return "redirect:url";实现重定向

           ④添加@ResponseBody注解返回字符串

     3、void           

           ①通过形参HttpServletResponse对象携带数据,例如:getWriter().write("字符串")(适用于ajax异步请求,即不需要返回视图)。

           ②原始servlet中request.getRequestDispatcher("url").forward(request,response)实现转发。

           ③原始servlet中response.sendRedirect("url")实现重定向。

           ④添加@ResponseBody注解没有返回值

            ps:

            转发与重定向区别:

            转发:

            浏览器URL的地址栏不变;

            是服务器行为(一次访问请求),2次跳转之间传输的信息不会丢;

           重定向:

           浏览器URL的地址栏改变;

           是客户端行为(至少两次请求),2次跳转之间传输的信息会丢失;

原文地址:https://www.cnblogs.com/Jansens520/p/13384660.html