最新 Restful API 风格 ResponseEntity 用法大全

简介: 最新 Restful API 风格 ResponseEntity 用法大全

最新 Restful API 风格 ResponseEntity 用法大全


我们在使用ResponseEntity时,更多的是为了设置不同的HttpResponse Code,如果你的系统偏好是通过Response Body中的Code来判断API状态即几乎所有API的HttpResponse Code=200,那么完全可以不使用ResponseEntity作为返回数据类型,只需要去返回Response Body,通过Body中开发者自定义的Code给API设置状态



用法一:

  //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状态码:


    200 - 请求成功
    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 充当网关或代理的服务器,未及时从远端服务器获取请求


505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

14.jpg


目录
相关文章
|
1天前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
4天前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
|
4天前
|
JSON 关系型数据库 测试技术
使用Python和Flask构建RESTful API服务
使用Python和Flask构建RESTful API服务
|
12天前
|
SQL 缓存 测试技术
构建高性能RESTful API:最佳实践与避坑指南###
—— 本文深入探讨了构建高性能RESTful API的关键技术要点,从设计原则、状态码使用、版本控制到安全性考虑,旨在为开发者提供一套全面的最佳实践框架。通过避免常见的设计陷阱,本文将指导你如何优化API性能,提升用户体验,确保系统的稳定性和可扩展性。 ###
49 12
|
9天前
|
JSON JavaScript API
深入浅出Node.js:从零开始构建RESTful API
【10月更文挑战第39天】 在数字化时代的浪潮中,API(应用程序编程接口)已成为连接不同软件应用的桥梁。本文将带领读者从零基础出发,逐步深入Node.js的世界,最终实现一个功能完备的RESTful API。通过实践,我们将探索如何利用Node.js的异步特性和强大的生态系统来构建高效、可扩展的服务。准备好迎接代码和概念的碰撞,一起解锁后端开发的新篇章。
|
12天前
|
存储 API 开发者
深入理解RESTful API设计原则
本文探讨了RESTful API的设计原则,强调了其在现代Web服务中的重要性。通过分析状态表示转移(REST)的概念、核心约束以及最佳实践,本文旨在为开发者提供构建高效、可扩展和易于维护的API的指导。文章还讨论了常见的设计陷阱和如何避免它们,以确保API设计的健壮性和灵活性。
|
14天前
|
JSON 缓存 API
构建高效RESTful API的最佳实践
【10月更文挑战第34天】在数字时代的浪潮中,后端开发扮演着至关重要的角色。本文将带你深入探索如何构建高效的RESTful API,从设计原则到实际编码技巧,再到性能优化和错误处理,我们将一一解锁这些技能。你将学会如何打造一个既优雅又强大的后端服务,让你的应用程序在激烈的市场竞争中脱颖而出。那么,让我们一起踏上这段精彩的旅程吧!
28 2
|
15天前
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
随着互联网技术的发展,前后端分离成为Web开发的主流模式。本文介绍RESTful API的基本概念、设计原则及在PHP中的实现方法。RESTful API是一种轻量级、无状态的接口设计风格,通过HTTP方法(GET、POST、PUT、DELETE)操作资源,使用JSON或XML格式传输数据。在PHP中,通过定义路由、创建控制器、处理HTTP请求和响应等步骤实现RESTful API,并强调了安全性的重要性。
22 2
|
17天前
|
存储 安全 API
深入理解RESTful API设计原则
本文旨在探讨RESTful API设计的基本原则和最佳实践,帮助开发者构建高效、可维护的Web服务。通过分析REST架构的核心概念,如资源、统一接口、无状态通信等,本文将指导读者如何设计符合REST原则的API,以及如何处理常见的设计挑战,如版本控制、错误处理和安全性问题。
|
19天前
|
存储 缓存 API
深入理解RESTful API设计原则
【10月更文挑战第28天】 在现代软件开发中,RESTful API已经成为了前后端分离架构下不可或缺的一部分。本文将探讨RESTful API的核心设计原则,包括资源导向、无状态性、统一的接口以及可缓存性等关键概念,并通过实例解析如何在实际应用中遵循这些原则来设计高效、可扩展的API。我们将深入了解REST架构风格的理论基础,并讨论其对提升系统互操作性和简化客户端实现的重要性。
53 3

热门文章

最新文章