• 常用注解解析


    @Controller

    @Controller 标识在一个类上,标识的类就是Spring MVC的控制器类,分发处理器会扫描使用了该注解的类是否使用了@RequestMapping 注解,@Controller只是定义了一个控制器类,只用使用了@RequestMapping 注解,才是真正处理请求的处理器;

    @RestController

    @RestController注解相当于@ResponseBody + @Controller合在一起的作用。

    1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

    2) 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
        如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

    @RequestMapping

    @RequestMapping 标识在类或者方法上,用来处理请求地址的注解,一共有6个属性:

      1. value 对应请求的实际地址
      2. method 请求的类型:get、post、put、delete 等,例如:@RequestMapping(value = "/test", method = RequestMethod.GET)只接受前台的get形式请求,method不写的情况下,接收所有类型的请求。关于post和get的相关描述和区别可以参考鄙人另外一坨博客:https://www.cnblogs.com/luzhanshi/p/10923326.html
      3. consumes 指定请求上的内容类型,比如application/json、text/html等
      4. produces 指定返回的数据类型,类型必须是Request Headers中accept包含的类型
      5. params 过滤请求,只有请求中包含某个参数,才会执行,比如@RequestMapping(value = "",params = "flag"),只有参数中包含flag才会执行,不然不能访问,http://localhost:8080/cat?true=flag这个地址是访问不到的,正确的地址是http://localhost:8080/cat?flag=true才可以正常访问
      6. headers 和params类似,只有请求headers里面包含某个key才可以访问方法

     

    @ResponseBody 

    @ResponseBody这个注解通常使用在控制层(controller)的方法上,其作用是将方法的返回值以特定的格式写入到response的body区域,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 进而将数据返回给客户端。当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。

           假如是字符串则直接将字符串写到客户端,假如是一个对象,此时会将对象转化为json串然后写到客户端。这里需要注意的是,如果返回对象,按utf-8编码。如果返回String,默认按iso8859-1编码,页面可能出现乱码。因此在注解中我们可以手动修改编码格式,例如@RequestMapping(value="/cat/query",produces="text/html;charset=utf-8"),前面是请求的路径,后面是编码格式。

           那么,控制层方法的返回值是如何转化为json格式的字符串的呢?其实是通过HttpMessageConverter中的方法实现的,因为它是一个接口,因此由其实现类完成转换。如果是bean对象,会调用对象的getXXX()方法获取属性值并且以键值对的形式进行封装,进而转化为json串。如果是map集合,采用get(key)方式获取value值,然后进行封装。

    补充:ModelAndView方式返回

    @Controller
    @RequestMapping("/dog")
    public class Dog {
        @RequestMapping("/houru")
        public ModelAndView houru() {
            ModelAndView modelAndView = new ModelAndView("/hello");//设置对应JSP的模板文件
            modelAndView.addObject("name", "miyue");
            return modelAndView;
        }
    }
  • 相关阅读:
    【转】跨域的理解与实现
    【3.5】从今天开始学习WCF技术
    LAB.js使用
    资源文件的动态加载
    C#对图片文件的压缩、裁剪操作初探
    WCF技术剖析_学习笔记之一
    SQL 写入调优
    【转】Nosql,为什么要使用
    wcf配置文件
    wcf错误
  • 原文地址:https://www.cnblogs.com/luzhanshi/p/11080675.html
Copyright © 2020-2023  润新知