1.统一返回结果的优点:
项目中我们会将响应封装成json返回,若将所有的接口的数据格式统一,可以使前端对数据的操作更一致、轻松。
2.组成
一般是包含状态码、返回消息、数据这三部分
例如:
{
code: , // 1:成功 , 0:失败
message:"xxx成功", //或者 xxx失败
data:数据 //实体对象,list,map
}
3.创建
1.首先创建ResponseEnum枚举,用来承载响应码对应报错的原因。
@Getter //方便外部获取code 和 message
@AllArgsConstructor //全参构造
@ToString
public enum ResponseEnum {
SUCCESS(0, "成功"),
ERROR(-1, "服务器内部错误"),
FILE_UPLOAD_ERROR(int,"xxx错误");
// ......
private Integer code;//状态码
private String message;//消息
}
2.创建统一返回对象R
@Data
public class R {
private Integer code;
private String message;
private Map<String, Object> data = new HashMap();
/**
* 构造器私有:外部无法创建该对象,只能通过下述中调用静态方法得到对象
*/
private R(){}
/**
* 返回成功
*/
public static R ok(){
R r = new R();
r.setCode(ResponseEnum.SUCCESS.getCode());
r.setMessage(ResponseEnum.SUCCESS.getMessage());
return r;
}
/**
* 返回失败
*/
public static R error(){
R r = new R();
r.setCode(ResponseEnum.ERROR.getCode());
r.setMessage(ResponseEnum.ERROR.getMessage());
return r;
}
/**
* 设置特定结果
*/
public static R setResult(ResponseEnum responseEnum){
R r = new R();
r.setCode(responseEnum.getCode());
r.setMessage(responseEnum.getMessage());
return r;
}
/*
* 这里可以不用static修饰,R.ok()或者 R.error() 之后,等到的是R对象
* R r =R.ok()
* */
public R message(String message){
this.setMessage(message);
return this;
}
public R code(Integer code){
this.setCode(code);
return this;
}
public R data(String key, Object value){
this.data.put(key, value);
return this;
}
public R data(Map<String, Object> map){
this.setData(map);
return this;
}
}
3.使用统一返回结果
增删改查(查单个查多个) CRUD
添加用户:(等同修改)
@PostMapping("/save")
public R save(@RequestBody() User user){
boolean b = userService.save(user);
if(b){
return R.ok().message("用户添加成功");
}else{
return R.error().message("用户添加失败");
}
}
删除用户:
boolean b = userService.removeById(id);
if(b){
return R.ok().message("用户删除成功");
}else{
return R.error().message("用户删除失败");
}
查询单条语句:
@GetMapping("/get/{id}")
public R getById( @PathVariable("id") Long id){
User user= userService.getById(id);
if(user!=null){
return R.ok().data("user",user);
}else{
return R.error().message("查询失败");
}
}
查询多条语句:
@GetMapping("/list")
public R list(){
List<User> list= userService.list();
return R.ok().data("list",list);
}
版权声明:本文为weixin_47356044原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。