官术网_书友最值得收藏!

4.1.1 創建Web服務

在Spring Boot中,創建Web服務的主要工作是實現Controller。而在創建Controller之后,需要對HTTP請求進行處理并返回正確的響應結果。我們可以基于一系列注解來開展這些開發工作。

1. 創建Controller

創建Controller的過程比較固定,我們已經在第1章中實現過一個簡單的Controller,如代碼清單4-1所示。

代碼清單4-1 UserController示例代碼

@RestController
@RequestMapping(value="users")
public class UserController {
    @GetMapping(value = "/{id}")
    public User getUserById(@PathVariable Long id) {
        User user = new User();
        ...
        return user;
    }
}

這是一個典型的Controller,可以看到上述代碼包含了@RestController、@Request-Mapping和@GetMapping等注解。其中,@RestController注解繼承自Spring WebMVC中的@Controller注解,顧名思義就是一個RESTful風格的HTTP端點,并且會自動使用JSON實現HTTP請求和響應的序列化/反序列化。根據這一特性,我們在構建Web服務時可以使用@RestController注解來取代@Controller注解以簡化開發。

@GetMapping注解和@RequestMapping注解的功能類似,只是默認使用Request-Method.GET來指定HTTP方法。Spring Boot 2引入了一批新注解,除了@GetMapping外還有@PutMapping、@PostMapping、@DeleteMapping等,方便開發人員顯式指定HTTP請求方法。當然,我們也可以繼續使用原先的@RequestMapping注解來實現同樣的效果。

在上述UserController中,我們通過靜態代碼完成根據用戶ID獲取用戶信息的業務流程。這里用到了兩層Mapping,第一層的@RequestMapping注解在服務層級定義了服務的根路徑users,而第二層的@GetMapping注解則在操作級別又定義了HTTP請求方法的具體路徑及參數信息。

2. 處理Web請求

處理Web請求的過程涉及獲取輸入參數以及返回響應結果。Spring Boot提供了一系列便捷有用的注解來簡化對請求輸入的控制過程,常用的包括上述UserController中所展示的@PathVariable和@RequestBody。

@PathVariable注解用于獲取路徑參數,即從類似url/{id}這種形式的路徑中獲取{id}參數的值。通常,使用@PathVariable注解時只需要指定參數的名稱即可。代碼清單4-2是使用@PathVariable注解的典型代碼示例,這里在請求路徑中同時傳入了兩個參數。

代碼清單4-2 @PathVariable注解使用的示例代碼

@PostMapping(value = "/{username}/{password}")
public User generateUser(@PathVariable("username") String username, @PathVariable("password") String password) {
    User user = userService.generateUser(username, password);
    return user;
}

在HTTP中,content-type屬性用來指定所傳輸的內容類型。而我們可以通過@Request-Mapping注解中的produces屬性來對其進行設置,通常會將其設置為application/json,示例代碼如代碼清單4-3所示。

代碼清單4-3 content-type屬性使用的示例代碼

@RestController
@RequestMapping(value = "users", produces="application/json")
public class UserController {
}

而@RequestBody注解就是用來處理content-type為application/json類型時的請求內容。通過@RequestBody注解可以將請求體中的JSON字符串綁定到相應的實體對象上。我們可以對前面的generateUser()方法進行重構,通過@RequestBody注解來傳入參數,如代碼清單4-4所示。

代碼清單4-4 @RequestBody注解使用的示例代碼

@PostMapping(value = "/")
public User generateUser(@RequestBody User user) {
}

這時候,如果想要通過Postman來發起這個POST請求,就需要使用如代碼清單4-5所示的一段JSON字符串。

代碼清單4-5 請求JSON字符串示例

{
    "username": "tianyalan",
    "password":"123456"
}
主站蜘蛛池模板: 胶南市| 卓资县| 特克斯县| 武定县| 武夷山市| 麻阳| 西乌珠穆沁旗| 老河口市| 唐海县| 同德县| 苍山县| 高台县| 逊克县| 宝坻区| 永川市| 临海市| 旬阳县| 怀远县| 沂水县| 和平县| 英德市| 西城区| 东明县| 巴东县| 开化县| 马鞍山市| 巴青县| 泸西县| 贡觉县| 德格县| 枣阳市| 宁陵县| 尚义县| 九龙坡区| 永嘉县| 通化市| 泾川县| 凤城市| 南岸区| 洛隆县| 合山市|