zoukankan      html  css  js  c++  java
  • SpringMVC系列(二): SpringMVC各个注解的使用

    1、@RequestMapping

    1.@RequestMapping除了能修饰方法,还能修饰类
    (1)修饰类:提供初步的请求映射信息,相对于web请求的根目录
    (2)修饰方法:提供进一步的细分映射信息
    相对于类定义处的URL,若类定义处未标注@RequestMapping,则方法处标记的URL相对于web应用的根目录

    2.@RequestMapping的请求方式
    @RequestMapping 的 value、method、params 及 heads 分别表示请求 URL、请求方法、请求参数及请求头的映射条
    件,他们之间是与的关系,联合使用多个条件可让请求映射更加精确化。

    3.Ant 风格资源地址支持 3 种匹配符:
    – ?:匹配文件名中的一个字符
    – *:匹配文件名中的任意字符
    – **:** 匹配多层路径
    • @RequestMapping 还支持 Ant 风格的 URL:
    – /user/*/createUser: 匹配
    /user/aaa/createUser、/user/bbb/createUser 等 URL
    – /user/**/createUser: 匹配
    /user/createUser、/user/aaa/bbb/createUser 等 URL
    – /user/createUser??: 匹配
    /user/createUseraa、/user/createUserbb 等 URL

     1 package com.study.springmvc.handlers;
     2 
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.RequestMapping;
     5 import org.springframework.web.bind.annotation.RequestMethod;
     6 
     7 @RequestMapping("/requestMappingTest")
     8 @Controller
     9 public class RequestMappingTest {
    10 
    11     public static final String SUCCESS="success";
    12     /**
    13      * 1.@RequestMapping除了能修饰方法,还能修饰类
    14      *(1)修饰类:提供初步的请求映射信息,相对于web请求的根目录
    15      *(2)修饰方法:提供进一步的细分映射信息
    16      * 相对于类定义处的URL,若类定义处未标注@RequestMapping,则方法处标记的URL相对于web应用的根目录
    17      * @return 成功
    18      */
    19     @RequestMapping("/testRequestMapping")
    20     public String testRequestMapping() {
    21         System.out.println("testRequestMapping");
    22         return SUCCESS;
    23     }
    24     
    25     /**
    26      * 2.@RequestMapping的请求方式
    27        @RequestMapping 的 value、method、params 及 heads 分别表示请求 URL、请求方法、请求参数及请求头的映射条
    28          件,他们之间是与的关系,联合使用多个条件可让请求映射更加精确化。
    29      * @return
    30      */
    31     @RequestMapping(value="/testMethod",method=RequestMethod.POST)
    32     public String testMethod() {
    33         System.out.println("testMethod的post方式");
    34         return SUCCESS;
    35     } 
    36     
    37     /**
    38      * 3.了解: 可以使用 params 和 headers 来更加精确的映射请求. params 和 headers 支持简单的表达式.
    39      * 
    40      * @return
    41      */
    42     @RequestMapping(value = "testParamsAndHeaders", params = { "username",
    43             "age!=10" }, headers = { "Accept-Language=zh-CN,zh;q=0.8" })
    44     public String testParamsAndHeaders() {
    45         System.out.println("testParamsAndHeaders");
    46         return SUCCESS;
    47     }
    48     /**
    49      * 4.Ant 风格资源地址支持 3 种匹配符:
    50      *    – ?:匹配文件名中的一个字符
    51      *    – *:匹配文件名中的任意字符
    52      *    – **:** 匹配多层路径
    53      * @return
    54      */
    55     @RequestMapping("/testAntPath/*/abc")
    56     public String testAntPath() {
    57         System.out.println("testAntPath");
    58         return SUCCESS;
    59     }
    60 }
     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3     
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <body>
     7 <!-- href="helloworld"和HelloWorld.java的@RequestMapping("/helloworld")对应 -->
     8 <a href="helloworld">Hello World</a>
     9 
    10 <br/>
    11 <a href="requestMappingTest/testRequestMapping">@RequestMapping修饰类和方法</a>
    12 
    13 <br/>
    14 <form action="requestMappingTest/testMethod" method="POST">
    15 <input type="submit" value="测试@RequestMappin的post请求方式">
    16 </form>
    17  
    18  <br/>
    19 <a href="requestMappingTest/testParamsAndHeaders?username=lgs&age=11">testParamsAndHeaders</a>
    20  
    21  <br/>
    22 <a href="requestMappingTest/testAntPath/ggggggg/abc">testAntPath</a>
    23     
    24     
    25 </body>
    26 </html>

    2、@PathVariable

    @PathVariable 映射 URL 绑定的占位符

    • 带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义

    • 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中。

    1 <a href="pathVariableTest/testPathVariable/10">testPathVariable</a>
     1 package com.study.springmvc.handlers;
     2 
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.PathVariable;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 
     7 @RequestMapping("/pathVariableTest")
     8 @Controller
     9 public class PathVariableTest {
    10 
    11     public static final String SUCCESS="success";
    12     
    13     /**
    14      * @PathVariable 可以来映射 URL 中的占位符到目标方法的参数中.
    15      * @param id
    16      * @return
    17      */
    18     @RequestMapping("/testPathVariable/{id}")
    19     public String testPathVariable(@PathVariable("id") Integer id) {
    20         System.out.println("testPathVariable: " + id);
    21         return SUCCESS;
    22     }
    23 }

     3、@RequestParam 

    @RequestParam 来映射请求参数

    value 值即请求参数的参数名
    required 该参数是否必须. 默认为 true
    defaultValue 请求参数的默认值

    index.jsp代码

    1 <!--@RequestParam测试 begin  --> 
    2 <br/>
    3 <a href="requestParamTest/testRequestParam?username=lgs&age=11">testRequestParam</a>
    4 <!--@RequestParam测试 end  --> 

    handlers代码

     1 package com.study.springmvc.handlers;
     2 
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.RequestMapping;
     5 import org.springframework.web.bind.annotation.RequestParam;
     6 
     7 @RequestMapping("/requestParamTest")
     8 @Controller
     9 public class RequestParamTest {
    10 
    11     public static final String SUCCESS="success";
    12     
    13 
    14     /**
    15      * @RequestParam 来映射请求参数. 
    16      * value 值即请求参数的参数名 
    17      * required 该参数是否必须. 默认为 true
    18      * defaultValue 请求参数的默认值
    19      */
    20     @RequestMapping(value = "/testRequestParam")
    21     public String testRequestParam(
    22             @RequestParam(value = "username") String username,
    23             @RequestParam(value = "age", required = false, defaultValue = "0") int age) {
    24         System.out.println("testRequestParam, username: " + username + ", age: "
    25                 + age);
    26         return SUCCESS;
    27     }
    28 }

    4. @RequestHeader

    映射请求头信息 用法同 @RequestParam,使用机会较少了解就行

    index.jsp代码

    1 <!--@RequestHeader测试 begin  --> 
    2 <br/>
    3 <a href="requestHeaderTest/testRequestHeader">testRequestHeader</a>
    4 <!--@RequestHeader测试 end  --> 

    handlers代码

     1 package com.study.springmvc.handlers;
     2 
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.RequestHeader;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 
     7 @RequestMapping("/requestHeaderTest")
     8 @Controller
     9 public class RequestHeaderTest {
    10 
    11     public static final String SUCCESS="success";
    12     
    13     /**
    14      * 使用机会较少了解就行
    15      * 映射请求头信息 用法同 @RequestParam
    16      */
    17     @RequestMapping("/testRequestHeader")
    18     public String testRequestHeader(
    19             @RequestHeader(value = "Accept-Language") String al) {
    20         System.out.println("testRequestHeader, Accept-Language: " + al);
    21         return SUCCESS;
    22     }
    23 }

    5. @CookieValue

    映射一个 Cookie 值. 属性同 @RequestParam,使用机会较少了解就行

    index.jsp代码

    1 <!--@CookieValue测试 begin  --> 
    2 <br/>
    3 <a href="cookieValueTest/testCookieValue">testCookieValue</a>
    4 <!--@CookieValue测试 end  --> 

    handlers代码

     1 package com.study.springmvc.handlers;
     2 
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.CookieValue;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 
     7 @RequestMapping("/cookieValueTest")
     8 @Controller
     9 public class CookieValueTest {
    10 
    11     public static final String SUCCESS="success";
    12     
    13     /**
    14      * 使用机会较少了解就行
    15      * 
    16      * @CookieValue: 映射一个 Cookie 值. 属性同 @RequestParam
    17      */
    18     @RequestMapping("/testCookieValue")
    19     public String testCookieValue(@CookieValue(value = "JSESSIONID") String sessionId) {
    20         System.out.println("testCookieValue: sessionId: " + sessionId);
    21         return SUCCESS;
    22     }
    23 }

     6. @InitBinder

    • 由 @InitBinder 标识的方法,可以对 WebDataBinder 对象进行初始化。WebDataBinder 是 DataBinder 的子类,用于完成由表单字段到 JavaBean 属性的绑定
    • @InitBinder方法不能有返回值,它必须声明为void。
    • @InitBinder方法的参数通常是是 WebDataBinder

    1     @InitBinder
    2     public void initBinder(WebDataBinder binder){
    3         binder.setDisallowedFields("lastName");
    4     }

    7. @DateTimeFormat

    对界面提交过来的日期进行格式化

    @DateTimeFormat 注解可对java.util.Date、java.util.Calendar、java.long.Long 时间类型进行标注:
    – pattern 属性:类型为字符串。指定解析/格式化字段数据的模式,如:”yyyy-MM-dd hh:mm:ss”
    – iso 属性:类型为 DateTimeFormat.ISO。指定解析/格式化字段数据的ISO模式,包括四种:ISO.NONE(不使用) -- 默认、ISO.DATE(yyyy-MM-dd)、ISO.TIME(hh:mm:ss.SSSZ)、ISO.DATE_TIME(yyyy-MM-dd hh:mm:ss.SSSZ)
    – style 属性:字符串类型。通过样式指定日期时间的格式,由两位字符组成,第一位表示日期的格式,第二位表示时间的格式:S:短日期/时间格式、M:中日期/时间格式、L:长日期/时间格式、F:完整日期/时间格式、-:忽略日期或时间格式

    1 @DateTimeFormat(pattern="yyyy-MM-dd")
    2     private Date birth;

    备注:必须在springmvc.xml里面配置<mvc:annotation-driven/>,因为配置了以后才会默认实例化数据集类型转换和格式化的工厂类FormattingConversionServiceFactroyBean,如果自定义了类型转换器则需要这样配置

     1 <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>    
     2     
     3     <!-- 配置 ConversionService -->
     4     <bean id="conversionService"
     5         class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
     6         <property name="converters">
     7             <set>
     8                 <ref bean="employeeConverter"/>
     9             </set>
    10         </property>    
    11     </bean>

    8. @NumberFormat

    对界面提交过来的数值进行格式化

    @NumberFormat 可对类似数字类型的属性进行标注,它拥有两个互斥的属性:
    – style:类型为 NumberFormat.Style。用于指定样式类型,包括三种:Style.NUMBER(正常数字类型)、Style.CURRENCY(货币类型)、 Style.PERCENT(百分数类型)
    – pattern:类型为 String,自定义样式,如patter="#,###"

    1 @NumberFormat(pattern="#,###,###.#")
    2     private Float salary;

     备注:必须在springmvc.xml里面配置<mvc:annotation-driven/>,因为配置了以后才会默认实例化数据集类型转换和格式化的工厂类FormattingConversionServiceFactroyBean,如果自定义了类型转换器则需要和@NumberFormat 一样配置

  • 相关阅读:
    c# 深拷贝与浅拷贝
    SQLServer性能优化 .net开发菜鸟总结
    Ajax自定义无刷新控件实现
    APScheduler库的详细用法
    catkin在centos中的安装
    第五次任务实现与项目总结第六组
    Javascript教程:获取当前地址栏url
    窗口处理问题
    HTML中area标签
    Asp.net中Frameset的使用小结
  • 原文地址:https://www.cnblogs.com/leeSmall/p/7806272.html
Copyright © 2011-2022 走看看