package com.njupt.swg.resp; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.Getter; import java.io.Serializable; /** * @Author swg. * @Date 2018/12/31 20:11 * @CONTACT 317758022@qq.com * @DESC 这个类(ServerResponse)作为本项目的通用的返回封装类,用于对服务端返回给客户端的数据进行统一的格式封装。 * 它可以包含响应的状态码、提示消息以及具体的业务数据等信息,方便客户端清晰地解析和处理服务端返回的结果,同时提高了整个项目返回数据格式的规范性和一致性。 * 通过实现Serializable接口,使得该类的对象可以被序列化,便于在网络传输、缓存存储等场景下进行操作,确保数据能够正确地传递和保存。 * 并且使用了Lombok的@Getter注解自动生成获取属性的Getter方法,以及使用了Jackson相关的注解来控制JSON序列化时的行为,例如排除值为null的字段等。 */ @Getter @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class ServerResponse implements Serializable { // 用于存储响应的状态码,通过不同的状态码来告知客户端请求的处理结果情况,例如成功、失败以及具体的错误类型等。 private int status; // 用于存储响应的提示消息,是对状态码含义的一种文字描述,方便客户端直观地了解请求处理的相关情况,比如操作成功的提示或者错误原因说明等。 private String msg; // 用于存储具体的业务数据,其类型是泛型参数T,意味着可以根据不同的业务场景返回不同类型的数据,比如可以是一个用户对象、商品列表等具体的业务相关实体数据。 private T data; /** * 私有构造方法之一,只接收状态码作为参数,用于创建一个ServerResponse实例,通常在已知状态码且不需要额外设置提示消息和业务数据时使用, * 比如在一些内部逻辑中根据固定的状态码来构造返回对象,后续可能会根据需要再进一步完善其他属性。 * @param status 响应的状态码,用于标识请求处理的结果情况。 */ private ServerResponse(int status) { this.status = status; } /** * 私有构造方法之二,接收状态码和提示消息作为参数,用于创建一个包含特定状态码和对应提示消息的ServerResponse实例, * 在需要明确告知客户端某个状态以及对应的详细说明时使用,例如返回错误状态并附上具体的错误原因描述等情况。 * @param status 响应的状态码,用于标识请求处理的结果情况。 * @param msg 响应的提示消息,用于详细说明状态码所代表的含义。 */ private ServerResponse(int status, String msg) { this.status = status; this.msg = msg; } /** * 私有构造方法之三,接收状态码和业务数据作为参数,用于创建一个包含特定状态码以及对应业务数据的ServerResponse实例, * 常用于请求处理成功并且有具体数据需要返回给客户端的场景,比如查询操作成功后返回查询到的结果数据等情况。 * @param status 响应的状态码,用于标识请求处理的结果情况。 * @param data 具体的业务数据,类型为泛型参数T,根据不同业务场景可以是不同类型的数据。 */ private ServerResponse(int status, T data) { this.status = status; this.data = data; } /** * 私有构造方法之四,接收状态码、提示消息和业务数据作为参数,用于创建一个完整包含状态码、提示消息以及业务数据的ServerResponse实例, * 这种情况可以更全面地向客户端传达请求处理的结果,既包含了处理状态、详细说明又有具体的数据内容,适用于多种复杂的业务返回场景。 * @param status 响应的状态码,用于标识请求处理的结果情况。 * @param msg 响应的提示消息,用于详细说明状态码所代表的含义。 * @param data 具体的业务数据,类型为泛型参数T,根据不同业务场景可以是不同类型的数据。 */ private ServerResponse(int status, String msg, T data) { this.status = status; this.msg = msg; this.data = data; } /** * 使用@JsonIgnore注解标记此方法,意味着在进行JSON序列化时,该方法不会被包含在序列化结果中。 * 这个方法用于判断当前ServerResponse实例所表示的响应是否为成功状态,通过比较实例中的状态码与ResponseEnum中定义的成功状态码(SUCCESS的状态码)是否相等来判断。 * @return 返回布尔值,true表示响应是成功状态,false表示响应是失败或者其他非成功的状态。 */ @JsonIgnore public boolean isSuccess() { return this.status == ResponseEnum.SUCCESS.getCode(); } /** * 以下是一系列静态方法,用于方便地创建表示成功状态的ServerResponse实例,根据不同的业务需求提供了多种创建方式,增强了灵活性。 * 创建一个表示成功状态的ServerResponse实例,使用ResponseEnum中定义的默认成功状态码和对应的描述信息进行实例化, * 适用于简单告知客户端操作成功,不需要额外传递具体消息和业务数据的场景。 * @param 泛型参数,表示可以返回不同类型的业务数据,这里创建实例时暂未指定具体数据类型。 * @return 返回一个表示成功状态的ServerResponse实例,包含默认的成功状态码和描述信息。 */ public static ServerResponse createBySuccess() { return new ServerResponse<>(ResponseEnum.SUCCESS.getCode(), ResponseEnum.SUCCESS.getDesc()); } /** * 创建一个表示成功状态的ServerResponse实例,使用ResponseEnum中定义的默认成功状态码,并传入自定义的提示消息进行实例化, * 适用于操作成功但需要向客户端传递一些额外的说明信息的场景,比如操作成功后的一些提示语等。 * @param 泛型参数,表示可以返回不同类型的业务数据,这里创建实例时暂未指定具体数据类型。 * @param message 自定义的提示消息,用于向客户端传达更详细的成功相关信息。 * @return 返回一个表示成功状态的ServerResponse实例,包含默认的成功状态码和传入的提示消息。 */ public static ServerResponse createBySuccessMessage(String message) { return new ServerResponse<>(ResponseEnum.SUCCESS.getCode(), message); } /** * 创建一个表示成功状态的ServerResponse实例,使用ResponseEnum中定义的默认成功状态码,并传入具体的业务数据进行实例化, * 适用于操作成功且有具体业务数据需要返回给客户端的场景,比如查询操作成功后返回查询到的数据等情况。 * @param 泛型参数,表示可以返回不同类型的业务数据,这里创建实例时指定了具体的数据类型,由传入的参数data决定。 * @param data 具体的业务数据,类型为泛型参数T,根据不同业务场景可以是不同类型的数据。 * @return 返回一个表示成功状态的ServerResponse实例,包含默认的成功状态码和传入的具体业务数据。 */ public static ServerResponse createBySuccess(T data) { return new ServerResponse<>(ResponseEnum.SUCCESS.getCode(), data); } /** * 创建一个表示成功状态的ServerResponse实例,使用ResponseEnum中定义的默认成功状态码,并传入自定义的提示消息和具体的业务数据进行实例化, * 适用于操作成功且既有需要向客户端传递的额外说明信息,又有具体业务数据需要返回的复杂场景,比如查询操作成功后返回查询到的数据以及一些相关的提示等情况。 * @param 泛型参数,表示可以返回不同类型的业务数据,这里创建实例时指定了具体的数据类型,由传入的参数data决定。 * @param message 自定义的提示消息,用于向客户端传达更详细的成功相关信息。 * @param data 具体的业务数据,类型为泛型参数T,根据不同业务场景可以是不同类型的数据。 * @return 返回一个表示成功状态的ServerResponse实例,包含默认的成功状态码、传入的提示消息和具体业务数据。 */ public static ServerResponse createBySuccess(String message, T data) { return new ServerResponse<>(ResponseEnum.SUCCESS.getCode(), message, data); } /** * 以下是一系列静态方法,用于方便地创建表示失败状态的ServerResponse实例,同样根据不同的业务需求提供了多种创建方式,便于在不同的错误场景下返回合适的错误信息。 * 创建一个表示通用失败状态的ServerResponse实例,使用ResponseEnum中定义的默认失败状态码和对应的描述信息进行实例化, * 适用于一些未明确细分的错误情况,作为一个笼统的错误返回给客户端,告知客户端请求处理出现了问题。 * @param 泛型参数,表示可以返回不同类型的业务数据,这里创建实例时暂未指定具体数据类型。 * @return 返回一个表示失败状态的ServerResponse实例,包含默认的失败状态码和描述信息。 */ public static ServerResponse createByError() { return new ServerResponse<>(ResponseEnum.ERROR.getCode(), ResponseEnum.ERROR.getDesc()); } /** * 创建一个表示失败状态的ServerResponse实例,使用ResponseEnum中定义的默认失败状态码,并传入自定义的提示消息进行实例化, * 适用于已知具体错误原因,需要向客户端传递详细错误信息的场景,通过传入的msg参数告知客户端出现错误的具体情况。 * @param 泛型参数,表示可以返回不同类型的业务数据,这里创建实例时暂未指定具体数据类型。 * @param msg 自定义的提示消息,用于向客户端传达具体的错误原因等相关信息。 * @return 返回一个表示失败状态的ServerResponse实例,包含默认的失败状态码和传入的提示消息。 */ public static ServerResponse createByErrorMessage(String msg) { return new ServerResponse<>(ResponseEnum.ERROR.getCode(), msg); } /** * 创建一个表示失败状态的ServerResponse实例,传入自定义的状态码和提示消息进行实例化, * 适用于需要根据不同的业务逻辑返回特定的错误状态码以及对应的详细错误信息的场景,通过传入的code和msg参数灵活地构建错误返回对象。 * @param 泛型参数,表示可以返回不同类型的业务数据,这里创建实例时暂未指定具体数据类型。 * @param code 自定义的状态码,用于标识具体的错误情况,根据业务逻辑可以设置不同的值。 * @param msg 自定义的提示消息,用于向客户端传达具体的错误原因等相关信息。 * @return 返回一个表示失败状态的ServerResponse实例,包含传入的状态码和提示消息。 */ public static ServerResponse createByErrorCodeMessage(int code, String msg) { return new ServerResponse<>(code, msg); } }