java结果返回集的进阶配置

本文档展示了如何创建一个名为`Rest`的Java类,用于封装REST API的响应状态,包括成功、错误等各种HTTP状态码,并提供了便捷的方法来快速构造相应状态的响应。同时定义了一个枚举`RestStatus`,包含了常见的HTTP状态码及其描述。此外,还定义了`RestException`异常类,用于在API调用中抛出异常。测试代码演示了如何使用这些类在Controller中返回不同状态的响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.声明一个Rest.java文件

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@ApiIgnore
@NoArgsConstructor
public class Rest<T> implements Serializable {
    @ApiModelProperty(value = "状态码")
    private int status;
    @ApiModelProperty(value = "状态信息")
    private String msg;
    @ApiModelProperty(value = "返回的Json数据")
    private T data;


    private Rest(RestStatus status){
        changeHttpStatus(status);
    }
    private Rest(RestStatus status,String msg){
        changeHttpStatus(status);
        this.msg = msg;
    }
    private Rest(RestStatus status,T data){
        changeHttpStatus(status);
        this.data = data;
    }
    private Rest(RestStatus status,String msg,T data){
        changeHttpStatus(status);
        this.data =  data;
        this.msg = msg;
    }

    private void changeHttpStatus(RestStatus status) {
        try {
            //Response请求头获取配置
            HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
            //设置返回的请求头
            response.setStatus(status.getCode());
            this.status  = status.getCode();
            this.msg = status.getDesc();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 200 GET/PUT请求返回
     */

    public static <T> Rest<T> SUCCESS() {
        return new Rest<>(RestStatus.SUCCESS);
    }

    public static <T> Rest<T> SUCCESS(String msg) {
        return new Rest<>(RestStatus.SUCCESS, msg);
    }

    public static <T> Rest<T> SUCCESS(T data) {
        return new Rest<>(RestStatus.SUCCESS, data);
    }

    public static <T> Rest<T> SUCCESS(String msg, T data) {
        return new Rest<>(RestStatus.SUCCESS, msg, data);
    }

    /**
     * 201 POST请求返回
     */

    public static <T> Rest<T> CREATED() {
        return new Rest<>(RestStatus.CREATED);
    }

    public static <T> Rest<T> CREATED(String msg) {
        return new Rest<>(RestStatus.CREATED, msg);
    }

    public static <T> Rest<T> CREATED(T data) {
        return new Rest<>(RestStatus.CREATED, data);
    }

    public static <T> Rest<T> CREATED(String msg, T data) {
        return new Rest<>(RestStatus.CREATED, msg, data);
    }

    /**
     * 202 暂时挂起的请求
     */

    public static <T> Rest<T> ACCEPTED() {
        return new Rest<>(RestStatus.ACCEPTED);
    }

    public static <T> Rest<T> ACCEPTED(String msg) {
        return new Rest<>(RestStatus.ACCEPTED, msg);
    }

    public static <T> Rest<T> ACCEPTED(T data) {
        return new Rest<>(RestStatus.ACCEPTED, data);
    }

    public static <T> Rest<T> ACCEPTED(String msg, T data) {
        return new Rest<>(RestStatus.ACCEPTED, msg, data);
    }

    /**
     * 204 DELETE请求返回
     */

    public static <T> Rest<T> NO_CONTENT() {
        return new Rest<>(RestStatus.NO_CONTENT);
    }

    public static <T> Rest<T> NO_CONTENT(String msg) {
        return new Rest<>(RestStatus.NO_CONTENT, msg);
    }

    public static <T> Rest<T> NO_CONTENT(T data) {
        return new Rest<>(RestStatus.NO_CONTENT, data);
    }

    public static <T> Rest<T> NO_CONTENT(String msg, T data) {
        return new Rest<>(RestStatus.NO_CONTENT, msg, data);
    }

    /**
     * 304 用于判断缓存是否过期
     */

    public static <T> Rest<T> NO_CHANGE() {
        return new Rest<>(RestStatus.NO_CHANGE);
    }

    public static <T> Rest<T> NO_CHANGE(String msg) {
        return new Rest<>(RestStatus.NO_CHANGE, msg);
    }

    public static <T> Rest<T> NO_CHANGE(T data) {
        return new Rest<>(RestStatus.NO_CHANGE, data);
    }

    public static <T> Rest<T> NO_CHANGE(String msg, T data) {
        return new Rest<>(RestStatus.NO_CHANGE, msg, data);
    }

    /**
     * 400 接口调用失败
     */

    public static <T> Rest<T> BAD_REQUEST() {
        return new Rest<>(RestStatus.BAD_REQUEST);
    }

    public static <T> Rest<T> BAD_REQUEST(String msg) {
        return new Rest<>(RestStatus.BAD_REQUEST, msg);
    }

    public static <T> Rest<T> BAD_REQUEST(T data) {
        return new Rest<>(RestStatus.BAD_REQUEST, data);
    }

    public static <T> Rest<T> BAD_REQUEST(String msg, T data) {
        return new Rest<>(RestStatus.BAD_REQUEST, msg, data);
    }

    /**
     * 401 无身份信息
     */

    public static <T> Rest<T> UNAUTHORIZED() {
        return new Rest<>(RestStatus.UNAUTHORIZED);
    }

    public static <T> Rest<T> UNAUTHORIZED(String msg) {
        return new Rest<>(RestStatus.UNAUTHORIZED, msg);
    }

    public static <T> Rest<T> UNAUTHORIZED(T data) {
        return new Rest<>(RestStatus.UNAUTHORIZED, data);
    }

    public static <T> Rest<T> UNAUTHORIZED(String msg, T data) {
        return new Rest<>(RestStatus.UNAUTHORIZED, msg, data);
    }

    /**
     * 403 有身份信息,但是无权限调用
     */

    public static <T> Rest<T> FORBIDDEN() {
        return new Rest<>(RestStatus.FORBIDDEN);
    }

    public static <T> Rest<T> FORBIDDEN(String msg) {
        return new Rest<>(RestStatus.FORBIDDEN, msg);
    }

    public static <T> Rest<T> FORBIDDEN(T data) {
        return new Rest<>(RestStatus.FORBIDDEN, data);
    }

    public static <T> Rest<T> FORBIDDEN(String msg, T data) {
        return new Rest<>(RestStatus.FORBIDDEN, msg, data);
    }

    /**
     * 404 资源不存在
     */

    public static <T> Rest<T> NOT_FOUND() {
        return new Rest<>(RestStatus.NOT_FOUND);
    }

    public static <T> Rest<T> NOT_FOUND(String msg) {
        return new Rest<>(RestStatus.NOT_FOUND, msg);
    }

    public static <T> Rest<T> NOT_FOUND(T data) {
        return new Rest<>(RestStatus.NOT_FOUND, data);
    }

    public static <T> Rest<T> NOT_FOUND(String msg, T data) {
        return new Rest<>(RestStatus.NOT_FOUND, msg, data);
    }

    /**
     * 410 请求已过时
     */

    public static <T> Rest<T> GONE() {
        return new Rest<>(RestStatus.GONE);
    }

    public static <T> Rest<T> GONE(String msg) {
        return new Rest<>(RestStatus.GONE, msg);
    }

    public static <T> Rest<T> GONE(T data) {
        return new Rest<>(RestStatus.GONE, data);
    }

    public static <T> Rest<T> GONE(String msg, T data) {
        return new Rest<>(RestStatus.GONE, msg, data);
    }

    /**
     * 429 请求次数过多
     */

    public static <T> Rest<T> TOO_MANY() {
        return new Rest<>(RestStatus.TOO_MANY);
    }

    public static <T> Rest<T> TOO_MANY(String msg) {
        return new Rest<>(RestStatus.TOO_MANY, msg);
    }

    public static <T> Rest<T> TOO_MANY(T data) {
        return new Rest<>(RestStatus.TOO_MANY, data);
    }

    public static <T> Rest<T> TOO_MANY(String msg, T data) {
        return new Rest<>(RestStatus.TOO_MANY, msg, data);
    }

    /**
     * 500 服务器错误
     */

    public static <T> Rest<T> ERROR() {
        return new Rest<>(RestStatus.ERROR);
    }

    public static <T> Rest<T> ERROR(String msg) {
        return new Rest<>(RestStatus.ERROR, msg);
    }

    public static <T> Rest<T> ERROR(T data) {
        return new Rest<>(RestStatus.ERROR, data);
    }

    public static <T> Rest<T> ERROR(String msg, T data) {
        return new Rest<>(RestStatus.ERROR, msg, data);
    }

    /**
     * 通用,请传入status
     */

    public static <T> Rest<T> COMMON(RestStatus status) {
        return new Rest<>(status);
    }

    public static <T> Rest<T> COMMON(RestStatus status, String msg) {
        return new Rest<>(status, msg);
    }

    public static <T> Rest<T> COMMON(RestStatus status, T data) {
        return new Rest<>(status, data);
    }

    public static <T> Rest<T> COMMON(RestStatus status, String msg, T data) {
        return new Rest<>(status, msg, data);
    }

    /**
     * 抛出异常
     */

    public static void Exception(String msg) throws RestException {
        throw new RestException(msg);
    }

    public static void Exception(RestStatus status) throws RestException {
        throw new RestException(status, status.getDesc());
    }

    public static void Exception(RestStatus status, String msg) throws RestException {
        throw new RestException(status, msg);
    }
}

2.新建一个枚举类RestStatus

public enum RestStatus {
    // 常用,用于GET【查询】/PUT【修改】请求
    SUCCESS(200, "成功"),

    // 常用,用于POST【新增】请求
    CREATED(201, "创建成功"),

    // 不常用,暂时挂起时启用,如异步处理某信息
    ACCEPTED(202, "已接受请求"),

    // 不常用,无返回值
    NO_CONTENT(204, "操作成功"),

    // 不常用,用于查询客户端缓存数据是否适用,一般附带时间戳请求
    NO_CHANGE(304, "数据无变化"),

    // 常用,请求的参数不合法,如参数格式不对、参数为空等
    BAD_REQUEST(400, "请求参数不合法"),

    // 常用,用户未登录时某些操作不许可时使用
    UNAUTHORIZED(401, "无身份信息"),

    // 常用,用户登录但权限不足时使用
    FORBIDDEN(403, "无操作权限"),

    // 常用,数据查询为空时使用
    NOT_FOUND(404, "资源不存在"),

    // 常用,数据查询为空时使用
    GONE(410, "该请求已过时"),

    // 常用,用户短时间发送短信等验证
    TOO_MANY(429, "请求次数过多"),

    // 常用,异常捕获
    ERROR(500, "服务器错误");

    private final int code;
    private final String desc;

    RestStatus(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public int getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }
}

3.新建一个抛出异常的返回类RestException,在Rest中被应用



import lombok.Data;
import springfox.documentation.annotations.ApiIgnore;

@Data
@ApiIgnore
public class RestException extends RuntimeException {
    private static final long serialVersionUID = 1L;

    private RestStatus status;
    private String msg;

    public RestException(String error) {
        super(error);
        this.msg = error;
    }

    public RestException(RestStatus status, String msg) {
        this.status = status;
        this.msg = msg;
    }


}

4.编写测试类代码

    @RequestMapping("/success")
    public Rest testSuccess(){
        return Rest.SUCCESS("成功返回");
    }

    @RequestMapping("/error")
    public Rest testError(){
        return  Rest.ERROR("失败返回");
    }

5.运行代码,访问localhost:8088/../success

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值