第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Spring MVC 地址請求映射

1. 前言

本節(jié)課將和大家一起講解 Spring MVC 的地址請求映射方案。通過本節(jié)課程的學(xué)習(xí),你將了解到:

  • 如何使用注解的方式進行映射;
  • 如何對請求的 URL 進行篩選、過濾。

本章節(jié)內(nèi)容相對而言較易理解,請掌握本章節(jié)中所提及的注解的使用。

2. @RequestMapping

什么是地址請求映射?

Spring MVC WEB 項目中,每一次請求都會交給用戶控制器響應(yīng)。為了保證用戶能請求到用戶控制器,則需要 Spring MVC 向外提供用戶控制器對外的請求接口。這就是請求地址映射。

圖片描述

如何映射?

答案是:可以使用 @RequestMapping 注解。

@RequestMapping 注解的作用:把用戶控制器以 URL 邏輯名的方式向外映射,用于由外向內(nèi)的請求調(diào)用。

Tips: 向外提供映射是 @RequestMapping 注解的事情。解析請求包中的信息,查找是否存在相匹配的控制器,這個工作由映射器組件完成。

2.1 @RequestMapping 的位置

@RequestMapping 注解既可以放置在類前面也可以放在方法前面。

@Controller
//類名前面                         
@RequestMapping("/user") 
public class UserController {
	 @RequestMapping(value = "/register") 
	 public String register() {
	           return “user/register”; 
	 }
}

如上代碼,請求控制器中的 register() 方法的 URL 應(yīng)該是 http://localhost:8888/user/register 。 如果類前面沒 @RequestMapping 則訪問的 URL 應(yīng)該是 http://localhost:8888/register 。

如此可知,通過類前面添加 @RequestMapping 注解可以歸類控制器的主體功能,窄化請求范圍。

Tips: 可以把類前面 @RequestMapping 中提供的名字看成命名空間。

2.2 使用表達式限定請求

@RequestMapping 注解的映射描述具有多樣性:

  • 支持標準的 URL 格式;
  • 支持 Ant 風(fēng)格。

什么是 Ant 風(fēng)格?

所謂 Ant 風(fēng)格指在 URL 中支持 通配符的語法結(jié)構(gòu)描述。 Ant 的通配符主要是 3 種:

  • ?: 匹配任何單字符;
  • * : 匹配 0 個或者任意數(shù)量的字符;
  • ** : 匹配 0 個或者更多的目錄。

如下面的地址請求映射:

  • /user/*/saveUser:可匹配類似于 /user/aaa/saveUser、/user/bbb/saveUser 等請求 URL;

  • /user/**/saveUser:可以匹配 /user/saveUser、/user/aaa/bbb/saveUser 等請求 URL;

Tips : ** 可以表示多個目錄。

  • /user/saveUser??:匹配 /user/saveUseraa、/user/saveUserbb 等請求 URL;

Spring MVC 的地址請求映射除了支持通配符外,還支持帶 {xxx} 占位符的 URL。

如下面的地址請求映射:

  • /user/{userId}:可以匹配 user/1、user/2、user/123 等請求 URL;
  • /user/**/{userId}:可以匹配 user/aa/bbb/1、user/aaa/45 等請求 URL;
  • company/{companyId}/user/{userId}/detail:可以匹配 company/1/user/2/detail 等請求 URL。

2.3 限定請求的方法

先看一看 @RequestMapping 注解中提供的相關(guān)方法:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {	
	String name() default "";
	@AliasFor("path")
	String[] value() default {};
	@AliasFor("value")
	String[] path() default {};
	RequestMethod[] method() default {};
	String[] params() default {};
	String[] consumes() default {};
	String[] produces() default {};
}

其中有 2 個很實用的方法:

  • method():可限定請求的方法;
  • params():可以限定請求的參數(shù)。

先了解一下如何限定請求方法。

所謂限定請求方法,指用戶控制器中的某些方法只響應(yīng)特定的請求方法。

HTTP 協(xié)議中請求方法有多種,常用的請求方法如下:

  • GET: 一般用于查詢請求,具有冪等性,多次相同的請求會返回相同的結(jié)果,所以可以使用瀏覽器緩存。不會影響系統(tǒng)的整體性能;
  • POST: 一般用于數(shù)據(jù)保存請求。不具有冪等性,多次操作會產(chǎn)生新的資源;
  • DELETE: 一般用于刪除資源請求,可以多次刪除;
  • PUT: 一般用于更新數(shù)據(jù)請求,也具有冪等性,無論更新多次性,結(jié)果都一樣。

如下面的實例,test() 方法只能響應(yīng)以 POST 方式發(fā)出的請求:

@RequestMapping
@RequestMapping(value="/test",method=RequestMethod.POST) 
public String test(){
    return "user/test1";   
}

RequestMethod 是一個枚舉類型:

public enum RequestMethod {
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}

你可以根據(jù)自己的需要為控制器中的方法設(shè)定響應(yīng)不同的請求方式。

2.4 限定請求參數(shù)

限定請求參數(shù)和限定請求方法同工異曲。所謂限定請求參數(shù),Spring MVC 會檢查請求包中是否包含符合要求的請求參數(shù)。通過 @RequestMapping 注解中的 params() 方法實現(xiàn)參數(shù)篩選。

如下面的實例:

@RequestMapping(value="/test", params="userId") 
public String test(){
    ...   
}

test()方法只會響應(yīng)請求包中包含有 userId 參數(shù)的 URL。

params()方法支持條件運算符構(gòu)建的表達式。

  • params=“userId”: 指揮響應(yīng)請求包中包含有名為 userId 參數(shù)的請求;
  • params="!userId" : 如果請求包中有名為 userId 的請求參數(shù),則不響應(yīng),否則響應(yīng);
  • params=“userId!=1”: 對響應(yīng)的請求有更多的要求,除了請求包中必須包含 userId 參數(shù)外,其值必須是 1;
  • params={“userId=1”,“userName”}: 響應(yīng)的條件是,請求包中必須包含名為 userId 和 userName 這兩個參數(shù),且 userId 參數(shù)的值必須為 1。

Tips : 方法、參數(shù)限制可同時使用。

@RequestMapping(value="/test",method = RequestMethod.POST,params = {"userId"})
public String test() {
	return null;
}

2.5 限定頭信息

所謂限定頭信息,指 Spring MVC 可以通過 HTTP 請求包中的消息頭信息進行過濾。如下面的實例:

@RequestMapping(value="/test",headers="content-type=text/*")
public String test(){
     ...   
}

test() 方法只會響應(yīng)請求包中的內(nèi)容類型為 text/* 的請求。

無論是方法限定、還是參數(shù)限定或是頭信息限定,其本質(zhì)都是檢查請求包是否符合條件要求。

3. 小結(jié)

本節(jié)課和大家一起講解了 Spring MVC 的地址請求映射,認識了 @RequestMapping 注解。此注解最主要的功能就是使用一個邏輯名把內(nèi)部控制器或控制器中的方法暴露給使用者。

@RequestMapping 提供了很靈活的映射方案,也提供了相應(yīng)的內(nèi)部方法對請求 URL 進一步過濾、篩選。

記住這個注解的使用,你便能變著花樣把控制器映射出去。