SpringBoot前后分离统一响应----R

小小的建议:

Controller层接受前端的参数的时候不要使用Map类型去接收(前端传参时谁知道要传什么东西。。。。),如果参数多的话最好封装成一个实体类进行接收。

实体类不要直接使用数据库对应的实体类,有些参数不一定是需要进行传递的(虽然可以标识为不必须的)
接收Map
在这里插入图片描述

进入正题

响应的枚举

可以固定一些常用的响应码等信息。

import lombok.Getter;

/**
 * <p>
 * 响应结果枚举
 * </p>
 *
 * @author D
 * @version 1.0
 * @date 2020/6/5 8:12
 */
@Getter
public enum ResultCode {
    /**
     * 响应成功
     */
    SUCCESS(true,2000,"成功"),
    /**
     * 响应失败
     */
    FAILED(false,4000,"错误"),

    /**
     * 响应失败,未知错误
     */
    ERROR(false,5000,"未知错误");

    /**
     * 响应是否成功
     */
    private final Boolean success;
    /**
     * 响应状态码
     */
    private final Integer code;
    /**
     * 响应信息
     */
    private final String message;

    ResultCode(Boolean success, Integer code, String message) {
        this.success = success;
        this.code = code;
        this.message = message;
    }
}

统一响应类

这里使用了swagger的一些注解,如不需要可以自行去除。

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import top.ddandang.swagger.enums.ResultCode;

import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 封装向客户端发回的响应数据
 * </p>
 *
 * @author D
 * @version 2.0
 * @date 2020/6/5 8:26
 */
@Data
@NoArgsConstructor
@ApiModel(description = "返回响应数据")
public class R {
    /**
     * 响应是否成功
     */
    @ApiModelProperty(value = "是否成功")
    private Boolean success;
    /**
     * 响应码
     */
    @ApiModelProperty(value = "响应状态码")
    private Integer code;
    /**
     * 响应信息
     */
    @ApiModelProperty(value = "响应信息")
    private String message;
    /**
     * 成功返回的数据
     */
    @ApiModelProperty(value = "成功返回的数据")
    private Map<String, Object> data = new HashMap<>();

    public R(Boolean success, Integer code, String message) {
        this.success = success;
        this.code = code;
        this.message = message;
    }

    public static R success() {
        return new R(ResultCode.SUCCESS.getSuccess()
                , ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage());
    }

    public static R failed() {
        return new R(ResultCode.FAILED.getSuccess()
                , ResultCode.FAILED.getCode(), ResultCode.FAILED.getMessage());
    }

    public static R error() {
        return new R(ResultCode.ERROR.getSuccess()
                , ResultCode.ERROR.getCode(), ResultCode.ERROR.getMessage());
    }

    /**
     * @param map 存放数据的map
     * @return 响应的数据
     */
    public R data(Map<String, Object> map) {
        this.setData(map);
        return this;
    }

    /**
     * @param key   参数名
     * @param value 数据
     * @return 返回的数据 key-value
     */
    public R data(String key, Object value) {
        this.data.put(key, value);
        return this;
    }

    /**
     * 自定义返回信息
     *
     * @param message 返回信息
     * @return 返回this
     */
    public R message(String message) {
        this.setMessage(message);
        return this;
    }

    /**
     * 自定义返回状态码
     *
     * @param code 状态码
     * @return 返回this
     */
    public R code(Integer code) {
        this.setCode(code);
        return this;
    }

    /**
     * 自定义响应状态
     *
     * @param success 成功状态
     * @return 返回this
     */
    public R success(Boolean success) {
        this.setSuccess(success);
        return this;
    }
}

使用方法(controller需要加@RestController注解)

返回的数据可以直接以Key----Value(String, Object)的形式,或者直接传递Map<String, Object>

    @GetMapping("/test")
    public R test() {
        User user =  new User("D", "ddandang", "123456");
        return R.success().data("user", user);
    }

响应结果
在这里插入图片描述

    @GetMapping("/test")
    public R test() {
        User user =  new User("D", "ddandang", "123456");
        Map<String, Object> map = new HashMap<>();
        List<User> users = new ArrayList<>();
        users.add(user);
        int total = 10;
        map.put("total", total);
        map.put("userList", users);
        return R.success().data(map);
    }

在这里插入图片描述
修改状态码,返回信息,成功状态

return R.success().data(map).code(404).message("分页查询用户的数据").success(true);

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/d875708765/article/details/108118317