1. 程式人生 > >Springboot的POST、GET、PUT、DELETE請求例項

Springboot的POST、GET、PUT、DELETE請求例項

概述

上文我們講了Spring Boot + gradle環境搭建,能夠將專案執行起來了。我們繼續往前走,接收一些常見的請求。

1 Spring的請求

前文我們的訪問我們的專案直接就是用的http://localhost:8080/,這裡對於具體的專案我們可以加上專案路徑並且設定埠號。在application.properties檔案中,

server.port=9090
server.context-path=/retrofitclientserver

此時訪問我們的專案就要使用http://localhost:9090/retrofitclientserver,埠號可以不指定,則會使用預設的埠號8080,為http://localhost:8080/retrofitclientserver

1.1 請求地址對映註解

請求地址對映註解可以加在類上,也可以加在方法上,加在類上表示這個類中所有響應請求的方法都是以該地址作為父路徑。

1.1.1 @RequestMapping的屬性

這是一個通用的註解,支援所有的HTTP請求。這裡大致講一下常用的屬性。

@AliasFor("path")
String[] value() default {};
@AliasFor("value")
String[] path() default {};
RequestMethod[] method() default {};

valuepath

valuepath是都是指請求地址。@RequestMapping("/login")

等價於@RequestMapping(path="/login")

佔位符

然後這兩個屬性還支援帶佔位符的URL,比如:

@RequestMapping(path = "/{account}", method = RequestMethod.GET)
public String getUser(@PathVariable String account)

這是引數名跟佔位符名字一致的情況,不一致的話就要這樣寫:

@RequestMapping(path = "/{account}/{name}", method = RequestMethod.GET)
public String getUser
(@PathVariable("account") String phoneNumber,@PathVariable("name") String userName)

這樣就把佔位符繫結到引數phoneNumber上了。

@PathVariable

這裡出現了@PathVariable@Pathvariable註解可以繫結佔位符傳過來的值到方法的引數上。

method
method屬性是指請求的方式。

組合註解(RequestMapping的變形)

  • @GetMapping = @RequestMapping(method = RequestMethod.GET)
  • @PostMapping = @RequestMapping(method = RequestMethod.POST)
  • @PutMapping = @RequestMapping(method = RequestMethod.PUT)
  • @DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)

組合註解是方法級別的,只能用在方法上,我們的例項基本都用組合註解。

1.1.2 @RequestParam

用法如下:

@PostMapping(value = "login")
public void login(@RequestParam String name, @RequestParam String password) {
    System.out.println(name + ":" + password);
}

@RequestParam註解可以用來提取名為“name”的String型別的引數,並將之作為輸入引數傳入,這就是SpringMVC的提取和解析請求引數的能力。
我們甚至可以不用這個註解,也能只要傳入引數名和方法的引數名一致,也能匹配:

@PostMapping(value = "login")
public void login(String name, @RequestParam String password) {
    System.out.println(name + ":" + password);
}

這裡的name引數沒有加這個註解,實際上也匹配到了。
如果傳入引數名字和方法引數名字不一致,可以給@RequestParam的屬性賦值:

@PostMapping(value = "login")
public void login(@RequestParam("account") String name, @RequestParam String password) {
    System.out.println(name + ":" + password);
}

1.1.3 @RequestBody

用法如下:

@PostMapping(path = "register")
public String registerUser(@RequestBody User user) {
    return user.toString();
}
public class User {
    private String name;
    private String password;

    省略getset、toString...
}

@RequestBody可以用來解析json字串(還可以解析xml),並將字串對映到對應的實體中,實體的欄位名和json中的鍵名要對應。

注意提交請求的時候要在請求頭指定content-typeapplication/json charset=utf-8

1.1.4 @RequestHeader

@RequestHeader註解用來將請求頭的內容繫結到方法引數上。
用法如下:

@PostMapping(value = "login")
public void login(@RequestHeader("access_token") String accessToken,@RequestParam String name) {
    System.out.println("accessToken:" + accessToken);
}

頭內容: