国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

3.3、URI 模板模式(Template Pattern)

caiyongji / 2762人閱讀

摘要:模板可以很方便地用于訪問一個(gè)方法中的的被選擇的部分。為模板擬定的文檔定義了一個(gè)是怎樣被參數(shù)化的。為了處理注解,需要按名找到匹配模板的變量。在定義模板變量時(shí),你需要更高的精確度。語法的第一部分定義了變量名,第二部分是一個(gè)正則表達(dá)式。

????這一部分是對 Spring 5 文檔的直接翻譯,連接是這個(gè)。這一部分的示例不再貼代碼,請到這個(gè)項(xiàng)目的 mvc 分支下查看,本篇示例的控制器名稱是 URITemplateController。

????URI 模板可以很方便地用于訪問一個(gè) @RequestMapping 方法中的 URL 的被選擇的部分。
????URI 模板是一個(gè)像URI的字符串,它包含一個(gè)或多個(gè)變量名。當(dāng)你用值來替代這些變量時(shí),這個(gè)模板就會變成一個(gè) URI。為 URI 模板擬定的 RFC 文檔定義了一個(gè) URI 是怎樣被參數(shù)化的。比如,URI 模板 http://www.example.com/users/{userId} 包含一個(gè)變量 userId。把值 fred 賦到這個(gè)變量中就產(chǎn)生了 http://www.example.com/users/...。
????在 Spring MVC 中,你可是在一個(gè)方法參數(shù)上使用注解 @PathVariable,來把這個(gè)參數(shù)綁定到一個(gè)URI模板變量上:

@GetMapping("/owners/{ownerId}")
public String findOwner(@PathVariable String ownerId, Model model) 
{
    Owner owner = ownerService.findOwner(ownerId);
    model.addAttribute("owner", owner);
    return "displayOwner";
}

????URI 模板 “/owners/{ownerId}” 指定了一個(gè)名叫 ownerId 的變量。當(dāng)控制器處理這個(gè)請求時(shí),ownerId 的值被設(shè)置為從 URI 中解析出來的合適的部分。比如,當(dāng)請求 /owners/fred 進(jìn)來時(shí),fred 就是 ownerId 的值。

????為了處理注解 @PathVariable,Spring MVC 需要按名找到匹配URI模板的變量。你可以在這個(gè)注解中指定:

@GetMapping("/owners/{ownerId}")
public String findOwner(@PathVariable("ownerId") String theOwner, Model model) 
{
    // implementation omitted
}

????如果 URI 模板變量名匹配方法參數(shù)名,那么你可以省略詳細(xì)配置。只要你的代碼在編譯時(shí)帶有調(diào)試信息或者在使用 Java 8 編譯時(shí)使用參數(shù) -parameters,Spring MVC 就會匹配方法參數(shù)名到 URI 模板變量名:

@GetMapping("/owners/{ownerId}")
public String findOwner(@PathVariable String ownerId, Model model) 
{
    // implementation omitted
}

????一個(gè)方法可以有任何數(shù)量的注解 @PathVariable:

@GetMapping("/owners/{ownerId}/pets/{petId}")
public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) 
{
    Owner owner = ownerService.findOwner(ownerId);
    Pet pet = owner.getPet(petId);
    model.addAttribute("pet", pet);
    return "displayPet";
}

????當(dāng)在一個(gè)Map參數(shù)上使用 @PathVariable 注解時(shí),這個(gè) Map 會被填上所有的 URI 模板變量。

????一個(gè) URI 模板可以被集成到類和方法級別的@RequestMapping 注解上。方法 findPet() 可以被一個(gè) /owners/42/pets/21 這樣的 URI 調(diào)用。

@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController 
{
    @RequestMapping("/pets/{petId}")
public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) 
{
        // implementation omitted
    }
}

????一個(gè) @PathVariable 參數(shù)可以是任何簡單類型,比如 int,long,Date 等。Spring 自動轉(zhuǎn)換到合適的類型,如果轉(zhuǎn)換失敗,就拋出一個(gè) TypeMismatchException 異常。你也可以注冊自己的數(shù)據(jù)類型轉(zhuǎn)換支持。參見“方法參數(shù)和類型轉(zhuǎn)換”和“自定義 WebDataBinder 初始化”。

????在定義URI模板變量時(shí),你需要更高的精確度。考慮 URL“/spring-web/spring-web-3.0.5.jar”。你怎么把它分成幾部分呢?
????注解 @RequestMapping 支持在 URI 模板變量中使用正則表達(dá)式。語法 {varName:regex} 的第一部分定義了變量名,第二部分是一個(gè)正則表達(dá)式。例如:

@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:d.d.d}{extension:.[a-z]+}")
public void handle(@PathVariable String version, @PathVariable String extension) 
{
    // ...
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/65118.html

相關(guān)文章

  • Notification通知欄

    摘要:當(dāng)向系統(tǒng)發(fā)出通知時(shí),它將先以圖標(biāo)的形式顯示在通知欄中。通知欄和抽屜式通知欄均是由系統(tǒng)控制,用戶可以隨時(shí)查看。更新通知跟發(fā)送通知使用相同的方式。創(chuàng)建返回棧添加返回棧代碼默認(rèn)情況下,從通知啟動一個(gè),按返回鍵會回到主屏幕。 目錄介紹 1.Notification簡單概述 2.Notification通知用途 3.Notification的基本操作 3.1 Notification創(chuàng)建必要的...

    FWHeart 評論0 收藏0
  • vue開發(fā)項(xiàng)目完全指南

    摘要:有兩種方法,一種是在開發(fā)環(huán)境中設(shè)置通過的,另一種是在服務(wù)器上修改的配置設(shè)置。這樣我們以后使用訪問接口就可以不加了,打包后訪問也不用手動去除統(tǒng)一管理在項(xiàng)目開發(fā)過程中,會涉及到很多接口的處理,當(dāng)項(xiàng)目足夠大時(shí),就需要統(tǒng)一管理接口。 這篇文章總結(jié)了vue項(xiàng)目的所遇到的問題,包括跨域、用戶認(rèn)證、接口統(tǒng)一管理、路由配置、兼容性處理,性能優(yōu)化等內(nèi)容。 項(xiàng)目github地址 : 前端 https:...

    leoperfect 評論0 收藏0
  • Play framework源碼解析 Part3:Play的初始化與啟動

    摘要:使用自建的類加載器主要是為了便于處理預(yù)編譯后的字節(jié)碼以及方便在模式下進(jìn)行即時(shí)的熱更新。 注:本系列文章所用play版本為1.2.6 在上一篇中,我們分析了play的2種啟動方式,這一篇,我們來看看Play類的初始化過程 Play類 無論是Server還是ServletWrapper方式運(yùn)行,在他們的入口中都會運(yùn)行Play.init()來對Play類進(jìn)行初始化。那在解析初始化之前,我們先...

    xuxueli 評論0 收藏0
  • PostgreSQL的實(shí)踐一:初識

    摘要:每個(gè)服務(wù)由多個(gè)進(jìn)程組成,為首的進(jìn)程名為。服務(wù)使用字節(jié)長的內(nèi)部事務(wù)標(biāo)識符,即時(shí)發(fā)生重疊后仍然繼續(xù)使用,這會導(dǎo)致問題,所以需要定期進(jìn)行操作。操作被認(rèn)為是緊跟操作后的操作。在涉及高比例插入刪除的表中,會造成索引膨脹,這時(shí)候可以重建索引。 簡介和認(rèn)知 發(fā)音 post-gres-q-l 服務(wù)(server) 一個(gè)操作系統(tǒng)中可以啟動多個(gè)postgres服務(wù)。每個(gè)服務(wù)由多個(gè)進(jìn)程組成,為首的進(jìn)程名為p...

    yibinnn 評論0 收藏0
  • 設(shè)計(jì)模式

    摘要:設(shè)計(jì)模式目的為了代碼可重用性讓代碼更容易被他人理解保證代碼可靠性設(shè)計(jì)原則設(shè)計(jì)原則是設(shè)計(jì)模式為了達(dá)到其目的,所實(shí)現(xiàn)的一些準(zhǔn)則。 設(shè)計(jì)模式簡介 1.什么是設(shè)計(jì)模式 設(shè)計(jì)模式對是經(jīng)驗(yàn)的總結(jié),是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。代表了最佳的實(shí)戰(zhàn)。 2.提出及GOF 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnso...

    enrecul101 評論0 收藏0

發(fā)表評論

0條評論

caiyongji

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<