项目中controller层统一返回结果

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版权协议,转载请附上原文出处链接和本声明。