zoukankan      html  css  js  c++  java
  • Spring + Mybatis 企业应用实战 第3章 Sping MVC的常用注解

    注解(annotation)

    @Controller

    @Controller是扩展的@Component的,可以说基本一样,就是作为一种标志。

    @RequestMapping

    • value:     指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
    • method:  指定请求的method类型, GET、POST、PUT、DELETE等;
    • consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
    • produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
    • params: 指定request中必须包含某些参数值是,才让该方法处理。
    • headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

    请求处理方法可以出现的参数类型:

    • request
    • response
    • session
    • Model
    • ModelMap
    • @PathVaribale
    • @RequestParam
    • @RequestHeader
    • RequestBody

    只要正确的添加了参数,spring会就传递给你,不在意参数的顺序。

    还有其他的,不一一罗列了。

    请求参数中可以返回的类型:

    • ModelAndView
    • Model
    • Map
    • View
    • String
    • void
    • Callable

    关于model

    model中addAttribute的内容是放在request中的。

    如下:

    1. @RequestMapping(value="/test2")
    2. public String test2(HttpServletRequest request,Model model)
    3. {
    4.    request.setAttribute("att1", "val55");
    5.    model.addAttribute("att2", "val2");
    6.    return "test2";
    7. }
    8.  
    9.  
    10. <body>
    11. att1:${requestScope.att1}
    12. att2:${requestScope.att2}
    13. </body>

    结果如下:

    @RequestParam

    有如下属性:

    • name
    • value
    • required
    • defaultValue
    1. @RequestMapping(value="/test3")
    2.    public String test3(HttpServletRequest request,Model model,@RequestParam(value="name") String name,@RequestParam(value="age") int age )
    3.    {
    4.  
    5.       model.addAttribute("name", name);
    6.       model.addAttribute("age", age);
    7.       return "test3";
    8.    }
    9.  
    10.  
    11. <body>
    12. name:${requestScope.name}
    13. <br/>
    14. age:${requestScope.age}
    15. </body>

    @PathVariable

    1. @RequestMapping(value="/test4/{name}")
    2.    public String test4(HttpServletRequest request,Model model,@PathVariable String name)
    3.    {
    4.  
    5.       model.addAttribute("name", name);
    6.       return "test4";
    7.    }
    8.  
    9. <body>
    10. name:${requestScope.name}
    11. </body>

    @CookieValue

    @RequestHeader

    @SessionAttribute

    @ModelAttribute

    ModelAttribute作用在方法上,会在一个Controller里的每个方法执行前都执行,目的是为了给model中增加公共数据。慎用这个功能。

    ModelAttribute也可以用在一个方法参数上。表示从Model中获取属性(如果有),并会将对象放入model中给前台(如果提交的表单中没有匹配,那么就是一个new的对象,所以这个对象必须要有无参构造函数)。

    从http请求中获取对象:

    1. public class User {
    2.    private String name;
    3.    private int age;
    4.  
    5.    public String getName() {
    6.       return name;
    7.    }
    8.    public void setName(String name) {
    9.       this.name = name;
    10.    }
    11.    public int getAge() {
    12.       return age;
    13.    }
    14.    public void setAge(int age) {
    15.       this.age = age;
    16.    }
    17.  
    18. }
    19.  
    20.  
    21. @RequestMapping(value="/test5")
    22.    public String test5(HttpServletRequest request,Model model,@ModelAttribute User user)
    23.    {
    24.       return "test5";
    25.    }
    26.  
    27.  
    28. <body>
    29. name:${requestScope.user.name}
    30. <br/>
    31. age:${requestScope.user.age}
    32. </body>

    注意:@ModelAttribute User user这一部分不加@ModelAttribute也可以从表单中获取一个转换的对象,但是不会将对象放入对象放入model中。

    在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制,就是Spring3.x中新引入的HttpMessageConverter即消息转换器机制。HttpMessageConverter接口指定了一个可以把Http request信息和Http response信息进行格式转换的转换器。通常实现HttpMessageConverter接口的转换器有以下几种:

    • ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;
    • StringHttpMessageConverter:   负责读取字符串格式的数据和写出二进制格式的数据;
    • ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据; 
    • FormHttpMessageConverter:       负责读取form提交的数据(能读取的数据格式为 application/x-www-form-urlencoded,不能读取multipart/form-data格式数据);负责写入application/x-www-from-urlencoded和multipart/form-data格式的数据;
    • MappingJacksonHttpMessageConverter:  负责读取和写入json格式的数据;
    • SourceHttpMessageConverter:                   负责读取和写入 xml 中javax.xml.transform.Source定义的数据;
    • Jaxb2RootElementHttpMessageConverter:  负责读取和写入xml 标签格式的数据;
    • AtomFeedHttpMessageConverter:              负责读取和写入Atom格式的数据;
    • RssChannelHttpMessageConverter:           负责读取和写入RSS格式的数据;
    1. @Controller
    2. public class PersonController {
    3.  
    4.     /**
    5.      * 查询个人信息
    6.      *
    7.      * @param id
    8.      * @return
    9.      */
    10.     @RequestMapping(value = "/person/profile/{id}/{name}/{status}", method = RequestMethod.GET)
    11.     public @ResponseBody
    12.     Person porfile(@PathVariable int id, @PathVariable String name,
    13.             @PathVariable boolean status) {
    14.         return new Person(id, name, status);
    15.     }
    16.  
    17.     /**
    18.      * 登录
    19.      *
    20.      * @param person
    21.      * @return
    22.      */
    23.     @RequestMapping(value = "/person/login", method = RequestMethod.POST)
    24.     public @ResponseBody
    25.     Person login(@RequestBody Person person) {
    26.         return person;
    27.     }
    28. }

    @ResponseBody 注释用于将返回对象(Employee EmployeeList)变为响应的正文内容,将使用 MappingJacksonHttpMessageConverter 将其映射到 JSON

    HttpMessageConverter接口,需要开启<mvc:annotation-driven  />。 
    AnnotationMethodHandlerAdapter将会初始化7个转换器,可以通过调用AnnotationMethodHandlerAdapter的getMessageConverts()方法来获取转换器的一个集合 List<HttpMessageConverter> 

     

    • ByteArrayHttpMessageConverter 
    • StringHttpMessageConverter
    • ResourceHttpMessageConverter 
    • SourceHttpMessageConverter
    • XmlAwareFormHttpMessageConverter
    • Jaxb2RootElementHttpMessageConverter 
    • MappingJacksonHttpMessageConverter
  • 相关阅读:
    iOS中的 .p12 证书的应用
    时间戳
    阿里云的esc
    iOS9 以上的真机调试 不用证书
    iOS UICollectionView数据少导致不能滚动
    jquery.js 库中的 选择器
    多媒体开发之---H.264中I帧和IDR帧的区别
    多媒体开发之---h264中 TS/ES 的区别
    多媒体开发之---h264中nal简介和i帧判断
    多媒体开发之---h264格式详解
  • 原文地址:https://www.cnblogs.com/xiaolang8762400/p/7003502.html
Copyright © 2011-2022 走看看