前言
在开发中约定是很重要的,我们在返回给前端的数据如果不统一的话,前端同事每一个接口都要做不同的处理,增加了开发难度,项目也不优雅。因此统一的返回就显得尤为重要。
一、定义返回状态枚举
这里我只定义了几个常用的状态,自己可以根据自己的需求多定义。
public enum HttpStatus {
SUCCESS(200,"操作成功"),
BAD_REQUEST(401,"参数列表错误"),
NOT_FOUND(404,"资源,服务未找到"),
ERROR(500, "操作失败");
private Integer code;
private String value;
HttpStatus(int code, String value) {
this.code = code;
this.value = value;
}
public int getCode(){
return this.code;
}
public String getValue(){
return this.value;
}
}
二、定义返回信息实体类
1、定义一个泛型类,因为数据是无法确定的,泛型才能装下各种类型的数据。
2、@Data是lombok插件的,可以自动添加get、set方法,让代码更优雅
import lombok.Data;
@Data
public class AjaxResult<T> {
/**
* 状态码
*/
private int code;
/**
* 状态信息
*/
private String msg;
/**
* 数据
*/
private T data;
}
三、定义统一返回类
public class Result {
private Result(){
}
public static AjaxResult success(){
AjaxResult<Object> result = new AjaxResult<>();
result.setCode(HttpStatus.SUCCESS.getCode());
result.setMsg(HttpStatus.SUCCESS.getValue());
return result;
}
public static AjaxResult success(String msg){
AjaxResult<Object> result = new AjaxResult<>();
result.setCode(HttpStatus.SUCCESS.getCode());
result.setMsg(msg);
return result;
}
public static <T> AjaxResult success(T data){
AjaxResult<Object> result = new AjaxResult<>();
result.setCode(HttpStatus.SUCCESS.getCode());
result.setMsg(HttpStatus.SUCCESS.getValue());
result.setData(data);
return result;
}
public static <T> AjaxResult success(int code, String msg, T data){
AjaxResult<Object> result = new AjaxResult<>();
result.setCode(code);
result.setMsg(msg);
result.setData(data);
return result;
}
public static AjaxResult error(){
AjaxResult<Object> result = new AjaxResult<>();
result.setCode(HttpStatus.ERROR.getCode());
result.setMsg(HttpStatus.ERROR.getValue());
return result;
}
public static AjaxResult error(String msg){
AjaxResult<Object> result = new AjaxResult<>();
result.setCode(HttpStatus.ERROR.getCode());
result.setMsg(msg);
return result;
}
}
四、 测试
1、定义一个测试用的实体类
import lombok.Data;
@Data
public class User {
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private Integer age;
}
2、测试代码
import com.example.springbootest.entity.Result;
import com.example.springbootest.entity.AjaxResult;
import com.example.springbootest.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/test")
@Slf4j
public class Test {
@GetMapping("/testResult")
public AjaxResult testResult(){
log.info("这是一个测试");
User user = new User();
user.setName("编程界的卡卡西");
user.setAge(26);
return Result.success(user);
}
}
3、postman调用