【SpringMVC学习04】SpringMVC常用注解

Spring增加了基于注解的控制器以及其他一些常用注解,这些注解的使用极大地减少了程序员的开发工作。 接下来,将对 Spring MVC 中的常用注解进行详细的讲解。
1、@RequestParam绑定单个请求参数值;
2、@PathVariable绑定URI模板变量值;
3、@CookieValue绑定Cookie数据值
4、@RequestHeader绑定请求头数据;
5、@ModelValue绑定参数到命令对象;
6、@SessionAttributes绑定命令对象到session;
7、@RequestBody绑定请求的内容区数据并能进行自动类型转换等。
8、@RequestPart绑定“multipart/data”数据,除了能绑定@RequestParam能做到的请求参数外,还能绑定上传的 文件等

一、Controller注解类型

用于指示 Spring 类的实例是一个控制器,其注解形式为@Controller。 该注解在使用时不需要再实现 Controller 接口,只需要将@Controller注解加入到控制器类上,然后通过 Spring 的扫描机制找到标注了该注解的控制器即可。

  • @Controller 注解在控制器类中的使用示例如下。
import org.springframework.stereotype.Controller;
...
@Controller
public class HelloSpringMVC {
	...
}

为了保证Spring能够找到控制器类,还需要在Spring MVC 的配置文件中添加相应的扫描配置信息。

  1. 在配置文件中引入spring-context
  2. 使用<context:component -scan >元素指定需要扫描的类包。

如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd">
          
    <!--配置自定义扫码的包-->
    <context:component-scan base-package="com.ordinary.controller"/>

</beans>

<context:component -scan>元素的属性 base-package 指定了需要扫描的类 包为 com.ordinary.controller。 在运行时,该类包及其子包下所有标注了注解的类都会被 Spring 所处理。

二、RequestMapping注解类型

2.1、@RequestMapping 注解的使用

Spring 通过@Controller 注解找到相应的控制器类后,还需要知道控制器内部对每一个请求是如何处理的,这就需要使用RequestMapping 注解类型 。 RequestMapping 注解类型用于映射一个请求或一个方法,其注解形式为 @RequestMapping ,可以使用该注解标注在一个方法或一个类上。

2.1.1、标注在方法上

当标注在一个方法上时 , 该方法将成为一个请求处理方法,它会在程序接收到对应的 URL 请求时被调用。 使用@RequestMapping 注解标注在方法上的示例如下。


import com.ordinary.entities.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloSpringMVC {
	@RequestMapping("/testPojo")
    public String testPojo(User user){
        System.out.println("testPojo:" + user);
        return SUCCESS;
    } 
}
    

使用@RequestMapping 注解后,上述代码中的 handleRequest()方法就可以通过地址: http://localhost:8080/testPojo进行访问。

2.1.2、标注在类上

当标注在一个类上时,该类中的所有方法都将映射为相对于类级别的请求 , 表示该控制器所处理的所有请求都被映射到 value 属性值所指定的路径下。 使用@RequestMapping 注解标注在类上的示例如下。

import com.ordinary.entities.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/springmvc")
@Controller
public class HelloSpringMVC {
	@RequestMapping("/testPojo")
    public String testPojo(User user){
        System.out.println("testPojo:" + user);
        return SUCCESS;
    } 
}

由于在类上添加了@RequestMapping 注解, 并且其 value 属性值为 “/hello” (只有一个参数时,value可省略),所以上述代 码方法的请求路径将变为 : http://localhost:8080/springmvc/testPojo如果该类中还 包含其他方法,那么在其他方法的请求路径中也需要加入 “/springmvc”。

2.2、@RequestMapping 注解的属性

属性名 类型 描述
name String 可选属性,用于为映射地址指定别名
value String[] 可选属性,同时也是默认属性,用于映射一个请求和一种方法,可以标注 在一个方法或一个类上
method RequestMethodO[] 可选属性,用于指定该方法用于处理哪种类型的请求方式,其请求方式包括 GET、 POST、 HEAD、 OPTIONS、 PUT、 PATCH、 DELETE 和TRACE。例如 method=RequestMethod.GET 表示只支持 GET 请求,如果需要支持多个请求方式则需要通过{}写成数组的形式,并且多个请求方式之间是有 英文逗号分隔
params String[] 可选属性,用于指定 Request 中必须包含某些参数的值,才可以通过其标注的方法处理
headers String[] 可选属性,用于指定 Request 中必须包含某些指定的 header 的值,才可以通过其标注的方法处理
consumes String[] 可选属性,用于指定处理请求的提交内容类型( Content-type) ,比如 application/json 、 textlhtml 等
produces String[] 可选属性,用于指定返回的内容类型,返回的内容类型必须是 request 请求头 (Accept) 中所包含的类型

所有属性都是可选的,但其默认属性是 value。 当 value 是其唯一属性肘, 可以省略属性名,例如下面两种标注的含义相同。

@RequestMapping("/springmvc")
@RequestMapping(value = "/springmvc")

三、RequestParam注解

有时候前端请求中参数名和后台控制器类方法中的形参名不一样,这就会导致后台无法正确绑定并接收到前端请求的参数。 为此, Spring MVC 提供了@RequestParam 注解来进行间接数据绑定。
@RequestParam 注解主要用于对请求中的参数进行定义,在使用时可以指定它的 4 个属性,具体如表所示。

属性 说明
value 属性的别名,这里指参数的名字,即入参的请求参数名字,如 value="username"表示请求的参数中名字为 username的参数的值将传入。 如果只使用 vaule 属性,则可以省略 value 属性名
name 指定请求头绑定的名称
required 用于指定参数是否必须,默认是true,表示请求中一定要有相应的参数
defaultValue 默认值,表示如果请求中没有同名参数时的默认值,defaultValue=“zhang”

@RequestParam 注解的使用非常简单,假设浏览器中的请求地址为 http://localhost:8080/springmvc/testRequestParam?username= 1 ,那么在后台 testRequestParam方法中的使用方式如下。

    @RequestMapping(value = "/testRequestParam")
    public String testRequestParam(@RequestParam(value = "username") String un,@RequestParam(value = "age",required = false) Integer age){
        System.out.println("username:" + un + ",age:" + age);

        return SUCCESS;
    }

上述代码会将请求中 username参数的值 1 赋给方法中的 un形参。这样通过输出语句就可以输出 un形参中的值。

四、RequestBody注解

  1. 作用:用于获取请求体的内容(注意:get方法不可以)
  2. 属性
    1. required:是否必须有请求体,默认值是true
  3. 样例代码如下
 /**     
 * 接收请求     
 * @return     
 */   
 @RequestMapping(path="/hello")    
 public String sayHello(@RequestBody String body) { 
     System.out.println("aaaa");    
     System.out.println(body);     
 return "success";    
 }

五、 PathVariable注解

@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。

  1. 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
  2. 属性
    1. value:指定url中的占位符名称
  3. Restful风格的URL
    1. 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
    2. restful风格的URL优点
      1. 结构清晰
      2. 符合标准
      3. 易于理解
      4. 扩展方便
  4. 样例代码如下
 <a href="user/hello/1">入门案例</a>       
  /**     
  * 接收请求     
  * @return     
  */    
  @RequestMapping(path="/hello/{id}")    
  public String sayHello(@PathVariable(value="id") String id) {        
   	System.out.println(id);        
  return "success";    
  }   

六、@CookieValue注解绑定Cookie数据值

@CookieValue用于将请求的Cookie数据映射到功能处理方法的参数上

public String test(@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)

如上配置将自动将JSESSIONID值入参到sessionId参数上,defaultValue表示Cookie中没有JSESSIONID时默认为空。

public String test2(@CookieValue(value="JSESSIONID", defaultValue="") Cookie sessionId)

传入参数类型也可以是javax.servlet.http.Cookie类型。@CookieValue也拥有和@RequestParam相同的三个参数,含义一样.

七、@RequestHeader注解绑定请求头数据

@RequestHeader用于将请求的头信息区数据映射到功能处理方法的参数上。

@RequestMapping(value="/header") 
public String test( 
		@RequestHeader("User-Agent") String userAgent, 
		@RequestHeader(value="Accept") String[] accepts)

如上配置将自动将请求头“User-Agent”值入参到userAgent参数上,并将“Accept”请求头值入参到accepts参数 上。@RequestHeader也拥有和@RequestParam相同的三个参数,含义一样。

八、@ModelAttribute绑定请求参数到命令对象

@ModelAttribute一个具有如下三个作用:
①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定 流程,而且自动暴露为模型数据用于视图页面展示时使用;
②暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对 象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,自动添加到 模型对象中,用于视图页面展示时使用;
③暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为 模型数据,用于视图页面展示时使用。



持续更新中........

九、SessionAttributes注解

持续更新中…

猜你喜欢

转载自blog.csdn.net/weixin_43800761/article/details/102806411