天天看點

最新 Restful API 風格 ResponseEntity 用法大全

最新 Restful API 風格 ResponseEntity 用法大全

我們在使用ResponseEntity時,更多的是為了設定不同的HttpResponse Code,如果你的系統偏好是通過Response Body中的Code來判斷API狀态即幾乎所有API的HttpResponse Code=200,那麼完全可以不使用ResponseEntity作為傳回資料類型,隻需要去傳回Response Body,通過Body中開發者自定義的Code給API設定狀态

最新 Restful API 風格 ResponseEntity 用法大全

  • ​​用法一:​​
  • ​​用法二:​​
  • ​​Get請求時​​
  • ​​Post請求新增一條記錄時,有傳回值​​
  • ​​Post請求新增一條記錄時,無傳回值​​
  • ​​Put更新請求,無傳回值​​
  • ​​用法三:​​
  • ​​1、查詢​​
  • ​​2、添加​​
  • ​​3、修改​​
  • ​​4、删除​​
  • ​​自定義的ResponseBean​​
  • ​​1、查詢​​
  • ​​2、增加​​
  • ​​3、更新​​
  • ​​4、删除​​
  • ​​HTTP狀态碼大全​​
最新 Restful API 風格 ResponseEntity 用法大全

用法一:

//1. 沒有傳回值: delete  update
  //@GetMapping("/demos")
  public ResponseEntity<Void> demos() {
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
  }

  //2 .查詢有傳回值 查詢
  //@GetMapping("/demoss")
  public ResponseEntity<Admin> demoss() {
    return new ResponseEntity<>(new Admin(), HttpStatus.OK);
  }

  //3 . 建立  nodejs  vue
  //@PutMapping("/create")
  public ResponseEntity<Void> create() {
    //return new ResponseEntity<Void>(HttpStatus.CREATED);
    MultiValueMap<String, String> headers = new HttpHeaders();
    headers.set("token", "xiaoli");
    return new ResponseEntity<>(headers, HttpStatus.CREATED);
  }      

用法二:

Get請求時

return ResponseEntity.ok();      
@GetMapping({"findAll"})
    public ResponseEntity<PageResult<User>> findAll(@RequestParam(name = "admin", required = false) String admin, @RequestParam(name = "page", defaultValue = "1") Integer page, @RequestParam(name = "rows", defaultValue = "10") Integer rows) {
        PageResult<User> userPageResult = this.userService.findAll(admin, page, rows);
        return ResponseEntity.ok(userPageResult);
    }      

Post請求新增一條記錄時,有傳回值

return ResponseEntity.status(HttpStatus.CREATE).body();

()存放傳回的内容

@PostMapping("save")
 public ResponseEntity save(@RequestBody User user) throws Exception {
        return ResponseEntity.status(HttpStatus.CREATED).body(this.userService.save(user));
    }      

Post請求新增一條記錄時,無傳回值

return new ResponseEntity(HttpStatus.CREATED);

Delete删除請求,無傳回

return new ResponseEntity(HttpStatus.NO_CONTENT);

@DeleteMapping({"delete"})
    public ResponseEntity delete(@RequestParam(name = "ids") Integer[] ids) {
        return ResponseEntity.ok(this.userService.delete(ids));
    }      

Put更新請求,無傳回值

ResponseEntity.noContent().build();

@PutMapping({"update"})
    public ResponseEntity update(@RequestBody User user) throws Exception {
        return ResponseEntity.ok(this.userService.update(user));
    }      

用法三:

SpringBoot項目ResponseEntity傳回總結

ResponseEntity進行CRUD

這題是使用ResponseEntity進行傳回值,不包含通用異常處理。

1、查詢

@GetMapping("queryall")
    public ResponseEntity<List<Announceconsultsituation>> queryAll(){
        try {
            List<Announceconsultsituation> announceconsultsituations = announceconsultsituationService.queryList(new Announceconsultsituation());
            if(CollUtil.isEmpty(announceconsultsituations)){
                return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
            }
            return ResponseEntity.ok(announceconsultsituations);
        }catch (Exception e){
            e.printStackTrace();
        }
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }

@GetMapping("queryone")
    public ResponseEntity<List<Announceconsultsituation>> queryone(){
        try {
            Announceconsultsituation announceconsultsituation = announceconsultsituationService.queryOne(id);
            if(announceconsultsituation==null){
                return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
            }
            return ResponseEntity.ok(announceconsultsituation);
        }catch (Exception e){
            e.printStackTrace();
        }
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }      

2、添加

@PostMapping("add")
    public ResponseEntity<Void> add(Announceconsultsituation announceconsultsituation){
        try {
            int count = announceconsultsituationService.add(announceconsultsituation);
            // 添加資料成功,傳回201
            if(count == 1){
                return ResponseEntity.status(HttpStatus.CREATED).build();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        // 執行失敗或者發生異常,傳回500
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }      

3、修改

@PutMapping("update")
    public ResponseEntity<Void> update(Announceconsultsituation announceconsultsituation){
        try {
            int count = announceconsultsituationService.update(announceconsultsituation);
            // 正常更新資料,傳回204
            if(count == 1){
                return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        // 執行失敗或者發生異常,傳回500
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }      

4、删除

@DeleteMapping("del/{id}")
    public ResponseEntity<Void> delete(@PathVariable("id") Integer id){
        try {
            //參數沒有或者格式錯誤,傳回400
            if(id == null){
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
            }
            int count = announceconsultsituationService.delete(id);
            // 正常删除,傳回204
            if(count == 1){
                return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        // 執行失敗或者發生異常,傳回500
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }      

自定義ResponeBean進行CRUD

自定義的ResponseBean

public class RespBean {
    private Integer status;
    private String msg;
    private Object obj;

    public static RespBean build() {
        return new RespBean();
    }

    public static RespBean ok(String msg) {
        return new RespBean(200, msg, null);
    }

    public static RespBean ok(String msg, Object obj) {
        return new RespBean(200, msg, obj);
    }

    public static RespBean error(String msg) {
        return new RespBean(500, msg, null);
    }

    public static RespBean error(String msg, Object obj) {
        return new RespBean(500, msg, obj);
    }

    private RespBean() {
    }

    private RespBean(Integer status, String msg, Object obj) {
        this.status = status;
        this.msg = msg;
        this.obj = obj;
    }

    public Integer getStatus() {
        return status;
    }

    public RespBean setStatus(Integer status) {
        this.status = status;
        return this;
    }

    public String getMsg() {
        return msg;
    }

    public RespBean setMsg(String msg) {
        this.msg = msg;
        return this;
    }

    public Object getObj() {
        return obj;
    }

    public RespBean setObj(Object obj) {
        this.obj = obj;
        return this;
    }
}      

1、查詢

@GetMapping("/")
  public List<JobLevel> getAllJobLevels() {
    return jobLevelService.getAllJobLevels();
}      

2、增加

@PostMapping("/")
public RespBean addJobLevel(@RequestBody JobLevel jobLevel) {
    if (jobLevelService.addJobLevel(jobLevel) == 1) {
        return RespBean.ok("添加成功!");
    }
    return RespBean.error("添加失敗!");
}      

3、更新

@PutMapping("/")
public RespBean updateJobLevelById(@RequestBody JobLevel jobLevel) {
    if (jobLevelService.updateJobLevelById(jobLevel) == 1) {
        return RespBean.ok("更新成功!");
    }
    return RespBean.error("更新失敗!");
}      

4、删除

@DeleteMapping("/{id}")
public RespBean deleteJobLevelById(@PathVariable Integer id) {
    if (jobLevelService.deleteJobLevelById(id) == 1) {
        return RespBean.ok("删除成功!");
    }
    return RespBean.error("删除失敗!");
}      

HTTP狀态碼大全

當浏覽者通路一個網頁時,浏覽者的浏覽器會向網頁所在伺服器送出請求。當浏覽器接收并顯示網頁前,此網頁所在的伺服器會傳回一個包含HTTP狀态碼的資訊頭(server header)用以響應浏覽器的請求。

HTTP狀态碼的英文為HTTP Status Code。

下面是常見的HTTP狀态碼:

- 請求成功
    301 - 資源(網頁等)被永久轉移到其它URL
    404 - 請求的資源(網頁等)不存在
    500 -      

HTTP狀态碼分類

HTTP狀态碼由三個十進制數字組成,第一個十進制數字定義了狀态碼的類型,後兩個數字沒有分類的作用。HTTP狀态碼共分為5種類型:

HTTP狀态碼分類 分類 分類描述

1** 資訊,伺服器收到請求,需要請求者繼續執行操作

2** 成功,操作被成功接收并處理

3** 重定向,需要進一步的操作以完成請求

4** 用戶端錯誤,請求包含文法錯誤或無法完成請求

5** 伺服器錯誤,伺服器在處理請求的過程中發生了錯誤

HTTP狀态碼清單:

HTTP狀态碼清單 狀态碼 狀态碼英文名稱 中文描述

100 Continue 繼續。用戶端應繼續其請求

101 Switching Protocols 切換協定。伺服器根據用戶端的請求切換協定。隻能切換到更進階的協定,例如,切換到HTTP的新版本協定

200 OK 請求成功。一般用于GET與POST請求

201 Created 已建立。成功請求并建立了新的資源

202 Accepted 已接受。已經接受請求,但未處理完成

203 Non-Authoritative Information 非授權資訊。請求成功。但傳回的meta資訊不在原始的伺服器,而是一個副本

204 No Content 無内容。伺服器成功處理,但未傳回内容。在未更新網頁的情況下,可確定浏覽器繼續顯示目前文檔

205 Reset Content 重置内容。伺服器處理成功,使用者終端(例如:浏覽器)應重置文檔視圖。可通過此傳回碼清除浏覽器的表單域

206 Partial Content 部分内容。伺服器成功處理了部分GET請求

300 Multiple Choices 多種選擇。請求的資源可包括多個位置,相應可傳回一個資源特征與位址的清單用于使用者終端(例如:浏覽器)選擇

301 Moved Permanently 永久移動。請求的資源已被永久的移動到新URI,傳回資訊會包括新的URI,浏覽器會自動定向到新URI。今後任何新的請求都應使用新的URI代替

302 Found 臨時移動。與301類似。但資源隻是臨時被移動。用戶端應繼續使用原有URI

303 See Other 檢視其它位址。與301類似。使用GET和POST請求檢視

304 Not Modified 未修改。所請求的資源未修改,伺服器傳回此狀态碼時,不會傳回任何資源。用戶端通常會緩存通路過的資源,通過提供一個頭資訊指出用戶端希望隻傳回在指定日期之後修改的資源

305 Use Proxy 使用代理。所請求的資源必須通過代理通路

306 Unused 已經被廢棄的HTTP狀态碼

307 Temporary Redirect 臨時重定向。與302類似。使用GET請求重定向

400 Bad Request 用戶端請求的文法錯誤,伺服器無法了解

401 Unauthorized 請求要求使用者的身份認證

402 Payment Required 保留,将來使用

403 Forbidden 伺服器了解請求用戶端的請求,但是拒絕執行此請求

404 Not Found 伺服器無法根據用戶端的請求找到資源(網頁)。通過此代碼,網

站設計人員可設定"您所請求的資源無法找到"的個性頁面

405 Method Not Allowed 用戶端請求中的方法被禁止

406 Not Acceptable 伺服器無法根據用戶端請求的内容特性完成請求

407 Proxy Authentication Required 請求要求代理的身份認證,與401類似,但請求者應當使用代理進行授權

408 Request Time-out 伺服器等待用戶端發送的請求時間過長,逾時

409 Conflict 伺服器完成用戶端的 PUT 請求時可能傳回此代碼,伺服器處理請求時

發生了沖突

410 Gone 用戶端請求的資源已經不存在。410不同于404,如果資源以前有現在被永久删除了可使用410代碼,網站設計人員可通過301代碼指定資源的新位置

411 Length Required 伺服器無法處理用戶端發送的不帶Content-Length的請求資訊

412 Precondition Failed 用戶端請求資訊的先決條件錯誤

413 Request Entity Too Large 由于請求的實體過大,伺服器無法處理,是以拒絕請

求。為防止用戶端的連續請求,伺服器可能會關閉連接配接。如果隻是伺服器暫時無法處理,則會包含一個Retry-After的響應資訊

414 Request-URI Too Large 請求的URI過長(URI通常為網址),伺服器無法處理

415 Unsupported Media Type 伺服器無法處理請求附帶的媒體格式

416 Requested range not satisfiable 用戶端請求的範圍無效

417 Expectation Failed 伺服器無法滿足Expect的請求頭資訊

500 Internal Server Error 伺服器内部錯誤,無法完成請求

501 Not Implemented 伺服器不支援請求的功能,無法完成請求

502 Bad Gateway 作為網關或者代理工作的伺服器嘗試執行請求時,從遠端伺服器接收到了一個無效的響應

503 Service Unavailable 由于超載或系統維護,伺服器暫時的無法處理用戶端的請求。延時的長度可包含在伺服器的Retry-After頭資訊中

504 Gateway Time-out 充當網關或代理的伺服器,未及時從遠端伺服器擷取請求

繼續閱讀