前言
随着前后端分离的潮流,现在需要考虑的是如果和前端有个明确的规定,比如:我添加了一条数据,后端设计的时候是void类型的,没有返回值,那前端怎么判断这个添加的操作是否成功呢?这个时候如果有一个约定,不管是不是void类型,我们把结果用结果集包起来,通过code的形式告知前端,这样前端不就可以判断是否操作成功了吗?
返回统一结果集的例子
1.首先创建一个Maven工程
<!-- 导入spring boot支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.6.RELEASE</version>
</dependency>
2.写包裹结果的类,这个类主要是存放一个code:用来给前端判断操作的状态。message:执行的结果。以及data:返回给前端的数据,可以是实体类,也可以是字符串。
引入依赖
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>7</source>
<target>7</target>
</configuration>
</plugin>
</plugins>
</build>
创建Result类
package com.zhao.spring.util;
public class Result<T> {
/**状态码*/
private int code;
/**消息*/
private String message;
/**返回的数据*/
private T data;
//省略getter和setter
//省略有参构造方法和无参构造方法
//省略toString方法
//定义一个枚举
enum ResultCode{
SUCCESS(200,"成功!"),
BAD(400, "失败!"),
EMPTY(404,"资源不存在!");
private int code;
private String message;
ResultCode(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
/**
* 成功
* @param data
* @param <T>
* @return
*/
public static <T> Result<T> success(T data){
Result<T> result = new Result<>();
result.code=ResultCode.SUCCESS.getCode();
result.message=ResultCode.SUCCESS.getMessage();
result.data=data;
return result;
}
}
3.创建一个测试类
@RestController
public class TestController {
@GetMapping("/findAll")
public Result findAll(@RequestParam("id") Integer id){
School school = new School();
school.setId(id);
school.setSchoolName("上海理工");
return Result.success(school);
}
}
访问结果如下
异常处理
异常处理是非常的重要的,比如前端传递的参数后端没有接收到,如果不进行异常处理的话就会报错,所以这个时候就需要进行异常处理了
1.创建一个全局的异常处理类ErrorCode
public enum ErrorCode {
null_id(1051, "nullId", "参数丢失");
private int status;
private String code;
private String reason;
ErrorCode(int status, String code, String reason) {
this.status = status;
this.code = code;
this.reason = reason;
}
//省略getter和setter方法
}
在上一个结果集类Result类中加上一个异常的返回方法
/**
* 失败
* @param <T>
* @param errorCode
* @return
*/
public static <T> Result<T> bad(ErrorCode errorCode){
Result<T> result=new Result<>();
result.code=ResultCode.BAD.getCode();
result.message=errorCode.getReason();
result.data=null;
return result;
}
3.然后我们再次修改测试的方法
@RestController
public class TestController {
@GetMapping("/findAll")
public Result findAll(@RequestParam("id") Integer id,
//required = false:允许传递的参数为空
@RequestParam(value = "schoolName",required = false) String schoolName){
if (schoolName == null){
//如果schoolName为null就返回异常:说明参数丢失
return Result.bad(ErrorCode.null_id);
}
School school = new School();
school.setId(id);
school.setSchoolName(schoolName);
return Result.success(school);
}
}
返回结果如下
到此,结束。