国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot學(xué)習(xí)隨筆- RestFul API(@RestController、@RequestBody、@PathVariable),使用ResponseEntity+HttpStatus作為返回值

這篇具有很好參考價(jià)值的文章主要介紹了Spring Boot學(xué)習(xí)隨筆- RestFul API(@RestController、@RequestBody、@PathVariable),使用ResponseEntity+HttpStatus作為返回值。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

學(xué)習(xí)視頻:【編程不良人】2021年SpringBoot最新最全教程

第十六章、RestFul API

  • 什么是REST

    REST 全稱(chēng)是 Resource Representational State Transfer,中文意思是表述性狀態(tài)轉(zhuǎn)移,它首次出現(xiàn)在2000年Roy Fielding的博士論文中,Roy Fielding是HTTP規(guī)范的主要編寫(xiě)者之一。他在論文中表示:我這篇文章的目的就是想在符合架構(gòu)原理的前提下,理解和評(píng)估以網(wǎng)絡(luò)為基礎(chǔ)的應(yīng)用軟件的架構(gòu)設(shè)計(jì),得到一個(gè)功能強(qiáng)、性能好、適宜通信的架構(gòu)。REST指的是一組架構(gòu)約束條條件和原則,“如果一個(gè)架構(gòu)復(fù)合REST的約束條件和原則,我們就稱(chēng)它為RESTful架構(gòu)”

RestFul:是一種以網(wǎng)絡(luò)為基礎(chǔ)構(gòu)架一種架構(gòu)一種架構(gòu)風(fēng)格,一個(gè)符合Rest設(shè)計(jì)原則和約束成這個(gè)架構(gòu)為RestFul。

REST本身并沒(méi)有創(chuàng)造新的技術(shù)、組件和服務(wù)、而隱藏在RESTful背后的理念就是使用web的現(xiàn)有特征和能力,更好地使用現(xiàn)有web標(biāo)準(zhǔn)中的一些準(zhǔn)則和約束。

  • RestFul遵循的架構(gòu)約束

    1. 客戶(hù)端-服務(wù)器架構(gòu):由客戶(hù)端、服務(wù)器和資源組成,通過(guò)HTTP管理請(qǐng)求。
    2. 無(wú)狀態(tài)的客戶(hù)端-服務(wù)器通信:每個(gè)請(qǐng)求都是獨(dú)立的,不會(huì)在請(qǐng)求之間保存客戶(hù)端信息。
    3. 可緩存的數(shù)據(jù):通過(guò)緩存數(shù)據(jù)來(lái)優(yōu)化客戶(hù)端-服務(wù)器交互。
    4. 統(tǒng)一的接口:信息以標(biāo)準(zhǔn)形式傳輸,包括資源的標(biāo)識(shí)和表示之間的分離,以及自描述的消息返回給客戶(hù)端。
  • 總結(jié)

    RestFul是一種架構(gòu)風(fēng)格,不是標(biāo)準(zhǔn),只是提供了一組設(shè)計(jì)原則和約束條件,它主要用于客戶(hù)端和服務(wù)器交互類(lèi)的軟件,基于這個(gè)風(fēng)格設(shè)計(jì)的軟件可以更簡(jiǎn)潔、更有層次,更易于實(shí)現(xiàn)緩存等機(jī)制。

  • URL定義

    • 資源:互聯(lián)網(wǎng)所有的事務(wù)都可以稱(chēng)為資源:一張圖片、一段文本、一條記錄…..
    • 資源操作:使用POST添加、DELETE刪除,PUT修改,GET查詢(xún),使用不同請(qǐng)求方法對(duì)資源進(jìn)行操作
      • 刪除 delete
      • 查詢(xún) get
      • 添加 post
      • 修改 put(修改全部字段) patch(更新部分字段)
  • 傳統(tǒng)方式操作資源

    • http://127.0.0.1/item/queryUser.action?id=1 查詢(xún) GET
    • http://127.0.0.1/item/saveUser 新增 POST
    • http://127.0.0.1/item/updateUser.action 更新 PUT
    • http://127.0.0.1/item/deleteUser.action?id=1 刪除 DELETE

    注意:傳統(tǒng)的操作是沒(méi)有問(wèn)題的,大神認(rèn)為有問(wèn)題的:你每次請(qǐng)求的接口或者地址都是在做描述,其實(shí)完全沒(méi)有這個(gè)必要,我使用了get請(qǐng)求,就是代表查詢(xún),使用post就是代表新增請(qǐng)求,我的意圖很明顯,完全沒(méi)有必要做描述,這就是為什么有了restful。

  • 使用RESTful操作資源

    • 【GET】 /users 查詢(xún)用戶(hù)信息列表
    • 【GET】 /users/1001 查看某個(gè)用戶(hù)信息
    • 【POST】 /users 新增用戶(hù)信息
    • 【PUT】 /users/1001 更新用戶(hù)信息(全部字段)
    • 【PATCH】 /users/1001 更新用戶(hù)信息(部分字段)
    • 【DELETE】 /users/1001 刪除用戶(hù)信息

第一個(gè)RestFul風(fēng)格的API

@RestController // 專(zhuān)用于restful風(fēng)格的注解,只能返回json/Xml格式的數(shù)據(jù)
@RequestMapping("/v1/users")
public class UserController {
    private static final Logger log = LoggerFactory.getLogger(UserController.class);

    /**
     * 獲取單個(gè)用戶(hù)
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public User user(@PathVariable("id") Integer id) {
        log.info("id:{}", id);
        return new User(21, "小明", 2000.2, new Date());
    }

    /**
     * 用戶(hù)列表
     * @return
     */
    @GetMapping()
    public List<User> users() {
        ArrayList<User> users = new ArrayList<>();
        users.add(new User(21, "小明", 2000.2, new Date()));
        users.add(new User(16, "小紅", 3000.2, new Date()));
        return users;
    }

    /**
     * 添加用戶(hù)
     * @param user
     */
    @PostMapping
    public void saveUser(@RequestBody User user) {
        log.info("用戶(hù)信息:{}", user);
        //調(diào)用業(yè)務(wù)方法...
    }

    /**
     * 修改用戶(hù)
     * @param user
     */
    @PutMapping("/{id}")
    public void update(@PathVariable("id") Integer id, @RequestBody User user) {
        log.info("更新用戶(hù)的id:{}",id);
        log.info("修改信息:{}", user);
        //調(diào)用業(yè)務(wù)方法...
    }

    /**
     * 刪除用戶(hù)
     * @param id
     */
    @DeleteMapping("/{id}")
    public void delete(@PathVariable("id") Integer id) {
        log.info("id:{}",id);
    }
}

**@RestController 注解**

**@RestController** 注解則是用來(lái)創(chuàng)建 REST API 控制器的。在 REST API 中,通常需要返回 JSON 或 XML 格式的數(shù)據(jù),而不是 HTML 視圖。因此,@RestController 注解結(jié)合了 @Controller@ResponseBody 注解的功能,可以方便地實(shí)現(xiàn) REST API 的開(kāi)發(fā)。

@RequestBody 注解

@RequestBody?注解將請(qǐng)求體中的 JSON 數(shù)據(jù)轉(zhuǎn)換為 Java 對(duì)象。

**@PathVariable注解**

這個(gè)注解用于處理RESTful API中的URL路徑參數(shù)。例如**@GetMapping("/{id}")** ,我們需要使用@PathVariable注解來(lái)提取URI中的{id},并將其作為方法的參數(shù)。

@PathVariable還有一些屬性可以使用:

  1. 指定路徑變量的名稱(chēng):?如果路徑變量的名稱(chēng)與方法參數(shù)的名稱(chēng)不同,我們可以在@PathVariable注解中指定路徑變量的名稱(chēng)。

    @GetMapping("/api/employees/{empId}")
    public String getEmployeeById(@PathVariable("empId") String id) {
        return "ID: " + id;
    }
    
    
  2. 指定默認(rèn)值:?我們還可以在@PathVariable注解中指定默認(rèn)值,以防路徑變量未提供。

    @GetMapping("/api/employees/{id}")
    public String getEmployeeById(@PathVariable(name = "id", required = false, defaultValue = "0") String id) {
        return "ID: " + id;
    }
    
  • 如果業(yè)務(wù)邏輯還要往深一層查,比如查某個(gè)人的某個(gè)寵物,那么可以這樣

    /**
     * 獲取某個(gè)人的所有寵物信息
     */
    @GetMapping("/{id}/pets")
    public List<Pet> pets(@PathVariable("id") Integer id) {
        log.info("查詢(xún)?nèi)说膇d:{}", id);
        return Arrays.asList(new Pet(2, "旺財(cái)", 2),new Pet(3,"花花",1));
    }
    
    /**
     * 獲取某個(gè)人的某個(gè)寵物信息
     */
    @GetMapping("/{id}/pets/{pid}")
    public Pet pets(@PathVariable("id") Integer id,@PathVariable("pid") Integer pid) {
        log.info("查詢(xún)?nèi)说膇d:{}", id);
    		Pet pet = new Pet(2, "旺財(cái)", 2);
        return pet;
    }
    

ResponseEntity 和 HttpStatus

ResponseEntity代表了整個(gè) HTTP 響應(yīng),包括狀態(tài)碼、頭部信息和響應(yīng)體??梢酝耆渲?HTTP 響應(yīng)。ResponseEntity提供了泛型,所以我們可以使用它來(lái)代替API中的返回值

  • 示例

    //ResponseEntity springmvc中用于restful響應(yīng)類(lèi),可以提供響應(yīng)的狀態(tài)碼,以及自定義響應(yīng)頭信息
    // HttpStatus:springmvc提供的枚舉類(lèi)型類(lèi)  網(wǎng)絡(luò)狀態(tài)碼
    
    /**
     * 獲取單個(gè)用戶(hù)
     */
    @GetMapping("/{id}")
    public ResponseEntity<User> user(@PathVariable("id") Integer id) {
        log.info("id:{}", id);
        User user = new User(21, "小明", 2000.2, new Date());
        return new ResponseEntity<>(user, HttpStatus.OK);// 狀態(tài)碼:200
    }
    
    /**
     * 用戶(hù)列表
     */
    @GetMapping()
    public ResponseEntity<List<User>> users() {
        ArrayList<User> users = new ArrayList<>();
        users.add(new User(21, "小明", 2000.2, new Date()));
        users.add(new User(16, "小紅", 3000.2, new Date()));
        return new ResponseEntity<>(users,HttpStatus.OK);// 狀態(tài)碼:200
    }
    
    /**
     * 添加用戶(hù)
     */
    @PostMapping
    public ResponseEntity<Void> saveUser(@RequestBody User user) {
        log.info("用戶(hù)信息:{}", user);
        //調(diào)用業(yè)務(wù)方法...
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);//沒(méi)有內(nèi)容,狀態(tài)碼204
    }
    

下一章:Spring Boot學(xué)習(xí)隨筆- 后端實(shí)現(xiàn)全局異常處理(HandlerExceptionResolver),前后端解決跨域問(wèn)題(@CrossOrigin(局部解決)自定義跨域配置類(lèi)(全局))文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-760634.html

到了這里,關(guān)于Spring Boot學(xué)習(xí)隨筆- RestFul API(@RestController、@RequestBody、@PathVariable),使用ResponseEntity+HttpStatus作為返回值的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包