最新 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


目录
相关文章
|
5月前
|
XML JSON API
识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
|
7月前
|
缓存 安全 API
RESTful与GraphQL:电商API接口设计的技术细节与适用场景
本文对比了RESTful与GraphQL这两种主流电商API接口设计方案。RESTful通过资源与HTTP方法定义操作,简单直观但可能引发过度或欠获取数据问题;GraphQL允许客户端精确指定所需字段,提高灵活性和传输效率,但面临深度查询攻击等安全挑战。从性能、灵活性、安全性及适用场景多维度分析,RESTful适合资源导向场景,GraphQL则适用于复杂数据需求。实际开发中需根据业务特点选择合适方案,或结合两者优势,以优化用户体验与系统性能。
|
7月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
6月前
|
缓存 边缘计算 前端开发
从业务需求到技术栈:电商API选型RESTful还是GraphQL?这5个维度帮你决策
在数字经济时代,电商平台的竞争已延伸至用户体验与系统效能。作为连接前后端及各类服务的核心,API接口的架构设计至关重要。本文对比RESTful与GraphQL两大主流方案,从电商场景出发,分析两者的技术特性、适用场景与选型逻辑,帮助开发者根据业务需求做出最优选择。
|
10月前
|
XML JSON API
Understanding RESTful API and Web Services: Key Differences and Use Cases
在现代软件开发中,RESTful API和Web服务均用于实现系统间通信,但各有特点。RESTful API遵循REST原则,主要使用HTTP/HTTPS协议,数据格式多为JSON或XML,适用于无状态通信;而Web服务包括SOAP和REST,常用于基于网络的API,采用标准化方法如WSDL或OpenAPI。理解两者区别有助于选择适合应用需求的解决方案,构建高效、可扩展的应用程序。
|
10月前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
安全 程序员 API
API对于程序员的多元用法:从基础到实战
API(应用程序编程接口)是现代软件开发中不可或缺的工具,充当不同系统间沟通的桥梁。通过API,程序员可以轻松获取外部数据、扩展应用功能、实现微服务间的通信等,极大提升开发效率和应用功能性。常见的API类型包括Web API、本地API和第三方API。使用API,开发者能快速集成复杂功能(如支付、物流跟踪),并确保数据安全与管理。掌握API的开发、维护及安全管理技巧,对构建高效、稳定的应用至关重要。随着数字化进程加速,API的重要性将不断提升。
401 1
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
323 12
|
XML JSON 缓存
深入理解RESTful API设计原则与实践
在现代软件开发中,构建高效、可扩展的应用程序接口(API)是至关重要的。本文旨在探讨RESTful API的核心设计理念,包括其基于HTTP协议的特性,以及如何在实际应用中遵循这些原则来优化API设计。我们将通过具体示例和最佳实践,展示如何创建易于理解、维护且性能优良的RESTful服务,从而提升前后端分离架构下的开发效率和用户体验。
|
JSON 缓存 测试技术
构建高效RESTful API的后端实践指南####
本文将深入探讨如何设计并实现一个高效、可扩展且易于维护的RESTful API。不同于传统的摘要概述,本节将直接以行动指南的形式,列出构建RESTful API时必须遵循的核心原则与最佳实践,旨在为开发者提供一套直接可行的实施框架,快速提升API设计与开发能力。 ####