Bootstrap

Springboot中接口返回结果及接口异常处理

我们做WEB开发的时候无可避免的就是接口请求的规范,因为现在是MVVC开发的模式不会去像之前的MVC开发模式去直接返回Model层就全部交给前端去渲染,MVC架构的兴起是由J2EE中的SSH框架(Struts,Sring,Hibernate)框架去兴起的,PHP,C++,QT开发的框架也会去做MVC开发模式。

不会像传统的MVC架构去直接在存储在Map对象中返回数据对象。MVC层有三种常用的传输Model渲染方式页面都是被渲染出来的不像现在的‘尤大大’改善后的MVVC模式,现在的前端算是一个独立工种,传统的SSH框架开发中用到的渲染框架去渲染Html(Freemarker,JSP,Thymeleaf)去渲染的HTML直到现在依旧使用到现在

Spingboot框架处理接口返回值Springboot框架算是现在Java中使用比较广泛的框架因为SSM框架去做整合太繁琐了,新手直接劝退,Spingboot的出现简便多了,Springboot去做的事情就是开箱及使用内嵌Tomact启动服务,约定大于配置,本文介绍的Springboot开发常见的三种返回方式:

第一种Sting类型返回的数据

@RestController
@GetMapping("/hello")
public String getStr(){
   
  return "hello,world";
}

此时请求/hello返回结果:

hello,world

第二种返回自定义对象结果

@RestController
@GetMapping(/Theworld)
public TheWorld world(){
   
     TheWorld theworld=new TheWorld();
     theworld.add(0,'Us');
     theworld.add(1,'China');    
     return theworld;
}

此时请求/Theworld请求返回结果:

{
   
   "id":0,
   "name":"China"
}

第三种就是请求异常:

@RestController
@GetMapping("/error")
public int error(){
   
    int i = 9/0;
    return i;
}

此时请求/error返回值就会去返回Sprinboot默认的异常处理结果:

{
   
  "timestamp": "2021-07-08T08:05:15.423+00:00",
  "status": 500,
  "error": "Internal Server Error",
  "path": "/all"
}

以上基本上就为基本返回结果之前MVC未分离的时候大多都是这样写但是现在的MVVC分离前端更专注于用户层,后端只关心性能分工合作,你要给他返回这样的结果前端会很蒙蔽,axios请求完之后都不知道怎么去处理结果返回给用户了,还有就是,比如张三喜欢对结果进行封装,他使用了Result对象,李四也喜欢对结果进行包装,但是他却使用的是Response对象,当出现这种情况时我相信前端人员一定会抓狂的。

所以我们迫切的需要一套统一规范的接口返回值去做到让前端请求后看到了美如画的接口返回结果

开启正文:定义统一的返回结果
1. status 状态值:由后端统一定义各种返回结果的状态码
2. message 描述:本次接口调用的结果描述
3.data 数据:本次返回的数据。
这是后端接口不成文的规则!code,data,msg,很多年前定下的规范沿用至今

定义完之后请求结果就为:

{
“status”:“0”,
“message”:“操作成功”,
“data”:“hello”
}
当然我们也可以去添加请求结果:比如请求结果附带请求时间‘requesttime’,请求IP地址’Iplocation’

/**
 * @author 仗剑走天涯!
 * @date 2022/4/12
 * 指尖改变世界
 * 描述: 定义返回结果Object,此处省略Get,Set
 */
public class ResultData <T> {
   
    //获取当前Time时间
    private LocalDateTime localDateTime2 = LocalDateTime.now();
    //返回状态码
    private Integer status;
    //返回消息
    private String message;
    //返回数据
    private T data;
  	//Success结果
    public static  <T> ResultData<T> success(T data){
   
        ResultData<T> resultData=new ResultData<>();
        resultData.setStatus(RequestCode.SUCCESS.getCode());
        resultData.setMessage(RequestCode.SUCCESS.getMessage());
        resultData.setData(data);
        return resultData;
    }
    //Fail结果
    public static <T> ResultData<T> fail(int code, String message) {
   
        ResultData<T> resultData = new ResultData<>();
        resultData.setStatus(code);
        resultData.setMessage(message);
        return resultData;
    }
}
;