1. 程式人生 > >Spring Boot開發中的常用註解的介紹

Spring Boot開發中的常用註解的介紹

一、簡言

在spring boot的開發中常常會用到註解 @RequestParam、@PathVariable、@RequestBody、@PageableDefault、@RequestMapping、@GetMapping@PostMapping定義提供給前端的介面函式。下面將會對這些註解進行說明。

二、註解說明

@PathVariable :繫結URI模板變數值,用來獲得url中的動態引數值。使用示例參考如下:
提供給前端的URL:

http://localhost:8080/springmvc/hello/101?param1=10&param2=20 

後端介面程式碼如下:


@RequestMapping("/hello/{id}")
    public String getDetails(@PathVariable(value="id") String id,
    @RequestParam(value="param1", required=true) String param1,
    @RequestParam(value="param2", required=false) String param2){
.......
}

在後端的介面定義中,定義了三個引數id,param1,param2。
@RequestParam:從request裡面拿取值。使用示例參考如下:
提供給前端的URL:

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

後端提供的介面程式碼如下:

public String getDetails(
    @RequestParam(value="param1", required=true) String param1,
        @RequestParam(value="param2", required=false) String param2){
...
}

@RequestParam支援四種引數

  • defaultValue如果本次請求沒有攜帶這個引數,或者引數為空,那麼就啟用預設值。
  • name繫結本次引數的名稱,要跟URL上面的一樣
  • required這個引數表明,引數值是不是必須的,true表示必須不能為空,false表示不是必須可以為空
  • value 跟name一樣的作用,是name屬性的一個別名。

@RequestBody :主要用來處理Content-Type是application/json,application/xml的Json字串。多用在Post型別請求中。
Pageable:是Spring Data庫中定義的一個介面,該介面是所有分頁相關資訊的一個抽象,通過該介面我們可以得到和分頁相關所有資訊,其中比較重要的資訊包括兩個:一個分頁的資訊,一個是排序的資訊。

page:第幾頁,從0頁開始,預設為第0也
size:每一頁的大小,預設為20
sort:排序相關資訊,以property,property(ASC|DESC)的方式組織,例如sort=firstname&sort=lastname,desc表示

@PageableDefault:表示spring data提供給我們個性化設定pageable預設配置。比如@PageableDefault(value = 15, sort = {“id”}, direction = Sort.Direction.DESC)就表示預設情況下我們按照id倒序排列,每一頁的大小為15。


@ResponseBody
@RequestMapping(value = "list", method=RequestMethod.GET)
public Page<blog> listByPageable(@PageableDefault(value = 15, sort = { "id" }, direction = Sort.Direction.DESC) 
    Pageable pageable) {
    return blogRepository.findAll(pageable);
}

@RequestMapping :主要將HTTP請求對映到MVC和REST控制器的處理方法上,可以具體細分為一下幾類:
1.將特定的請求或者請求模式對映到一個控制器上,甚至還可以具體到方法級別的對映上,參考如下:

@RestController
@RequestMapping("/home")      // /home/*的請求會由IndexController 進行處理
public class IndexController {
    @RequestMapping("/")          // /home的請求會由get()方法來處理
    String get() {
        //mapped to hostname:port/home/
        return "Hello from get";
    }
    @RequestMapping("/index")   // /home/index的請求會由index()來處理
    String index() {
        //mapped to hostname:port/home/index/
        return "Hello from index";
    }
}

2.可以處理多個URL,比如將多個請求對映到一個方法上去,參考如下:

@RestController
@RequestMapping("/home")
public class IndexController {

    @RequestMapping(value = {
        "",
        "/page",
        "page*",
        "view/*,**/msg"
    })
    String indexMultipleMapping() {
        return "Hello from index multiple mapping.";
    }
}

在上述程式碼中,如下URL都會由indexMultipleMapping()來處理:

/home
/home/
/home/page
/home/pageabc
/home/view/
/home/view/view

3.用@RequestMapping處理HTTP的各種方法,如GET、PUT、POST、DELETE以及PATCH。以POST的方法為例,參考如下:

@RestController
@RequestMapping("/home")
public class IndexController {
    @RequestMapping(method = RequestMethod.POST)
    String post() {
        return "Hello from post";
    }
}

[email protected]可以通過定義生產物件produces和消費物件consumes來進一步縮小對映型別的範圍。參考如下:

@RestController
@RequestMapping("/home")
public class IndexController {
    @RequestMapping(value = "/prod", produces = {
        "application/JSON"
    })
    @ResponseBody
    String getProduces() {             //getProduces()方法會產生一個JSON的響應
        return "Produces attribute";
    }

    @RequestMapping(value = "/cons", consumes = {
        "application/JSON",
        "application/XML"
    })
    String getConsumes() {         //getCOnsumes()方法可以同時處理請求中的JSON和XML內容
        return "Consumes attribute";
    }
}

@GetMapping和@PutMapping:是@RequestMapping的快捷方式,比如@GetMapping所扮演的是@RequestMapping(method=RequestMethod.GET)的一個快捷方式。
三、參考資料
1.@RequestParam,@RequestBody,@PathVariable等註解區別
2.SpringMVC @RequestBody @RequestParam @PathVariable 等引數繫結註解詳解
3.springmvc 通過 Pageable物件和PageableDefault註解獲取分頁資訊
4.超詳細 Spring @RequestMapping 註解使用技巧