SpringBoot學習之-使用@RequestMapping更好的匹配請求

如今後臺有一接口,功能爲打招呼。編碼以下:正則表達式

@RequestMapping("hello")
    public String hello(){
        return "hello";
    }
複製代碼

輸入地址http://127.0.0.1:8080/hello就能夠看到返回值了,可是需求說了打招呼並不止一種方式,hello能夠,hi能夠,how are you也能夠。因此爲了適應需求的變化,編碼更改以下spring

@RequestMapping({"hello","hi","how are you"})
public String hello(){
    return "hello";
}
複製代碼

剛改好編碼,需求又說了,有些人打招呼會帶上人名,好比,hello zhangsan,hi lisi。那人名有無數種,這該怎麼辦呢?別急,spring也爲 RequestMapping提供了模糊匹配功能。修改編碼以下:json

@RequestMapping("hello/*")
public String hello(){
    return "hello";
}
複製代碼

這樣 http://127.0.0.1:8080/hello/zhangsan, http://127.0.0.1:8080/hello/lisi 就均可以請求到這個方法了。bash

如今無論誰和你打招呼,這個請求均可以被接收到了。可是,別人和你打招呼,你也得象徵性的回覆一下吧。總不能冷冰冰的光回覆一個hello,好歹也來個hello老張,hello小李吧。app

因此如今咱們不光要模糊匹配這我的名,還得想辦法獲取到這我的名。修改編碼以下:post

@RequestMapping("hello/{name}")
public String hello(@PathVariable("name") String name){
    return "hello : "+name;
}
複製代碼

結合@PathVariable註解,咱們在方法中就能夠很方便的獲取到和咱們打招呼的人名了。ui

本覺得能夠開開心心的上線,結果到線上後發現有不少名字爲數字的帳戶也惡意發了打招呼請求過來。那咱們該如何屏蔽掉這些名字爲數字的帳戶呢?編碼

這個時候就能夠用到正則表達式了,修改編碼以下:url

@RequestMapping("hello/{name:[a-z]+}")
public String hello(@PathVariable("name") String name){
    return "hello : "+name;
}
複製代碼

RequestMapping匹配url的使用到這兒就差很少了。下面在簡單介紹下其他信息的匹配。spa

1.params

仍是接上面的請求,若是如今有一個需求,須要統計全部打招呼人的性別。那這些打招呼的請求中,就必須帶上性別sex字段。

@RequestMapping(value = "hello/{name:[a-z]+}",params = "sex")
public String hello(@PathVariable("name") String name){
    return "hello : "+name;
}
複製代碼

這樣在請求中就必須帶上sex字段了,否則咱們是不會接的。 http://127.0.0.1:8080/hello/liuyu?sex=man

那既然帶上sex字段了,有些特定時候我只想接受異性的打招呼該怎麼辦呢?

@RequestMapping(value = "hello/{name:[a-z]+}",params = "sex=female")
public String hello(@PathVariable("name") String name){
    return "hello : "+name;
}
複製代碼

或者不是男性的我都接。

@RequestMapping(value = "hello/{name:[a-z]+}",params = "sex!=male")
public String hello(@PathVariable("name") String name){
    return "hello : "+name;
}
複製代碼

對於有些不帶性別,圖謀不軌的,咱們固然也要特殊照顧一下

@RequestMapping(value = "hello/{name:[a-z]+}",params = "!sex")
public String hello(@PathVariable("name") String name){
    return "滾! : "+name;
}
複製代碼

2.header用法和params相似,在這兒就不重複了

在RequestMapping註解裏面還有兩個參數consumes和produces,其實這兩個參數含義也很簡單.

consumes表示請求頭中Content-Type字段包含在內,這個請求才會處理。 好比:

@RequestMapping(value = "hello",consumes = "application/json")
    public String hello(){
複製代碼

這個方法,只有Content-Type=application/json,請求才會被處理,不然就是404.

而produces則表示請求頭中Accept字段包含在內,纔會處理。

@RequestMapping(value = "hello",produces = "application/json")
    public String hello(){
複製代碼

這個方法須要Accept=application/json。

固然consumes和produces均可以表達反義。

@RequestMapping(value = "hello",produces = "!application/json")
    public String hello(){
複製代碼

這樣就表明Accept!=application/json


返回目錄

相關文章
相關標籤/搜索