From ca55c0240de4699c277b5683cefaaeda2e905a59 Mon Sep 17 00:00:00 2001 From: zhouyu <3065526146@qq.com> Date: Tue, 17 Dec 2024 09:30:00 +0800 Subject: [PATCH] 111 --- .../njupt/swg/common/resp/ServerResponse.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/snailmall-user-service/src/main/java/com/njupt/swg/common/resp/ServerResponse.java b/snailmall-user-service/src/main/java/com/njupt/swg/common/resp/ServerResponse.java index fd098b8..52b1a01 100644 --- a/snailmall-user-service/src/main/java/com/njupt/swg/common/resp/ServerResponse.java +++ b/snailmall-user-service/src/main/java/com/njupt/swg/common/resp/ServerResponse.java @@ -14,66 +14,93 @@ import java.io.Serializable; * @CONTACT 317758022@qq.com * @DESC 作为本项目的通用的返回封装类 */ +// 使用lombok的@Getter注解,该注解会自动为类中的私有成员变量(这里的status、msg和data)生成对应的Getter方法,方便在其他地方获取这些变量的值,避免手动编写Getter方法的重复代码,使得代码更加简洁,在使用ServerResponse对象时能够轻松获取其包含的状态码、消息以及业务数据等信息。 @Getter +// 使用Jackson的@JsonSerialize注解来配置该类在序列化(例如转换为JSON格式以便在网络传输或者存储时使用)时的行为,这里设置include属性为JsonSerialize.Inclusion.NON_NULL,表示在序列化过程中只包含非空的属性值,也就是如果某个属性(如msg或者data)的值为null,那么在最终序列化生成的JSON数据中就不会包含对应的字段,这样可以减少传输的数据量,并且使序列化后的结果更加符合实际需求,避免传递不必要的空值信息。 @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +// 让这个类实现Serializable接口,表示该类的对象可以被序列化和反序列化,这在很多场景下非常有用,比如将服务器响应对象存储到文件中、在网络中传输响应对象等情况时,通过序列化将对象转换为字节流进行存储或传输,然后再通过反序列化将字节流还原为对象,实现数据的持久化和跨网络的交互等功能。 public class ServerResponse implements Serializable { + // 定义一个私有整型成员变量status,用于存储响应的状态码,通过不同的状态码来表示响应的不同情况,例如成功、失败、需要登录等,在业务逻辑中可以根据这个状态码来判断请求处理的结果状态,进而进行相应的后续操作。 private int status; + // 定义一个私有字符串成员变量msg,用于存储响应的提示消息,这个消息可以是对响应状态的具体描述,比如在成功时可以是“操作成功”,在失败时可以是具体的错误原因等,方便客户端(如前端应用)获取并展示给用户,让用户了解操作的结果情况。 private String msg; + // 定义一个泛型类型的私有成员变量data,用于存储具体的业务数据,这里使用泛型使得这个响应类可以适用于不同类型的业务数据返回情况,例如可以返回用户信息、商品列表等各种类型的数据,增加了类的通用性和灵活性。 private T data; + // 定义一个默认的无参构造函数,主要用于在一些情况下(比如反序列化时)创建一个空的ServerResponse对象,后续可以再通过Setter方法(虽然这里没有显式定义,但可以通过lombok的@Setter注解自动生成或者手动编写)或者其他方式来设置对象的各个属性值。 public ServerResponse(){} + // 定义一个私有构造函数,接收一个整型参数status,用于创建一个只设置了状态码的ServerResponse对象,通常在一些内部逻辑中,已知具体的状态码但暂时不需要设置消息和业务数据时,可以使用这个构造函数来创建对象,后续再根据具体情况补充其他属性值。 private ServerResponse(int status){ this.status = status; } + // 定义一个私有构造函数,接收一个整型参数status和一个字符串参数msg,用于创建一个设置了状态码和提示消息的ServerResponse对象,在已知响应状态码以及对应的描述消息时,可以通过这个构造函数来初始化对象,方便在业务逻辑中根据具体情况返回相应的响应对象,告知客户端操作的结果情况。 private ServerResponse(int status,String msg){ this.status = status; this.msg = msg; } + // 定义一个私有构造函数,接收一个整型参数status和一个泛型参数data,用于创建一个设置了状态码和业务数据的ServerResponse对象,在请求处理成功且有具体业务数据需要返回给客户端时,可以使用这个构造函数来构建包含相应数据的响应对象,让客户端能够获取到操作结果以及所需的数据信息。 private ServerResponse(int status,T data){ this.status = status; this.data = data; } + // 定义一个私有构造函数,接收一个整型参数status、一个字符串参数msg和一个泛型参数data,用于创建一个完整设置了状态码、提示消息以及业务数据的ServerResponse对象,这是最全面的构造方式,在各种不同的业务场景下,根据实际的响应情况(包含状态、具体描述以及要返回的数据)都可以通过这个构造函数来创建合适的响应对象返回给客户端。 private ServerResponse(int status,String msg,T data){ this.status = status; this.msg = msg; this.data = data; } + // 使用Jackson的@JsonIgnore注解标记这个方法,该注解表示在序列化对象时忽略这个方法,也就是不会将这个方法的返回值作为字段包含在序列化后的结果中(例如JSON数据中不会出现这个方法对应的字段)。这个方法用于判断响应是否成功,通过比较当前对象的状态码与ResponseEnum.SUCCESS(通常是一个枚举类型,用于统一管理响应相关的状态码等信息)中定义的成功状态码是否相等来返回一个布尔值,如果相等则表示响应成功,否则表示响应失败,方便在业务逻辑中快速判断响应的结果状态。 @JsonIgnore public boolean isSuccess(){ return this.status == ResponseEnum.SUCCESS.getCode(); } + /** + * 以下是一系列静态方法,用于方便地创建表示成功情况的ServerResponse对象,通过不同的重载形式,可以根据具体的业务需求返回不同形式的成功响应对象,这些方法都被标记为静态方法,意味着可以直接通过类名来调用,无需先创建类的实例,提高了创建响应对象的便捷性和代码的可读性。 + + */ /** * 成功的方法 */ + // 这个静态方法用于创建一个表示成功的ServerResponse对象,使用ResponseEnum.SUCCESS中定义的状态码和描述信息来初始化对象,通常在业务操作顺利完成且没有额外需要返回的具体业务数据以及自定义消息时,可以调用这个方法返回一个简单表示成功的响应对象给客户端,告知客户端请求处理成功。 public static ServerResponse createBySuccess(){ return new ServerResponse<>(ResponseEnum.SUCCESS.getCode(),ResponseEnum.SUCCESS.getDesc()); } + // 这个静态方法用于创建一个带有自定义提示消息的成功响应对象,接收一个字符串参数message,使用ResponseEnum.SUCCESS中定义的状态码以及传入的自定义消息来初始化对象,在业务操作成功且希望返回一个特定的提示消息给客户端(比如“新增用户成功”等)时,可以调用这个方法,让客户端展示这个自定义的消息给用户,告知具体的成功情况。 public static ServerResponse createBySuccessMessage(String message){ return new ServerResponse<>(ResponseEnum.SUCCESS.getCode(),message); } + // 这个静态方法用于创建一个包含业务数据的成功响应对象,接收一个泛型参数data,使用ResponseEnum.SUCCESS中定义的状态码以及传入的业务数据来初始化对象,在业务操作成功且有具体的数据需要返回给客户端(比如查询用户列表成功后返回用户列表数据等)时,调用这个方法来构建包含相应数据的响应对象,方便客户端获取并使用这些数据进行后续操作,如展示数据等。 public static ServerResponse createBySuccess(T data){ return new ServerResponse<>(ResponseEnum.SUCCESS.getCode(),data); } + // 这个静态方法是创建成功响应对象最全面的方式,接收一个字符串参数message和一个泛型参数data,使用ResponseEnum.SUCCESS中定义的状态码、传入的自定义消息以及业务数据来初始化对象,在业务操作成功且既有自定义的提示消息又有具体业务数据需要返回给客户端时,调用这个方法可以创建一个完整的包含状态、消息和数据的响应对象返回给客户端,满足各种复杂的成功响应场景需求。 public static ServerResponse createBySuccess(String message,T data){ return new ServerResponse<>(ResponseEnum.SUCCESS.getCode(),message,data); } + /** + * 以下是一系列静态方法,用于方便地创建表示失败情况的ServerResponse对象,同样通过不同的重载形式,可以根据具体的业务需求返回不同形式的失败响应对象,这些静态方法可以直接通过类名调用,方便快捷地构建相应的失败响应信息返回给客户端,告知客户端请求处理出现问题等情况。 + + */ /** * 失败的方法 */ + // 这个静态方法用于创建一个表示一般性失败的ServerResponse对象,使用ResponseEnum.ERROR中定义的状态码和描述信息来初始化对象,通常在业务操作出现未明确的错误情况且没有更具体的错误消息需要返回时,可以调用这个方法返回一个简单表示失败的响应对象给客户端,告知客户端请求处理出现错误。 public static ServerResponse createByError(){ return new ServerResponse<>(ResponseEnum.ERROR.getCode(),ResponseEnum.ERROR.getDesc()); } + // 这个静态方法用于创建一个带有自定义错误提示消息的失败响应对象,接收一个字符串参数msg,使用ResponseEnum.ERROR中定义的状态码以及传入的自定义消息来初始化对象,在业务操作失败且希望返回一个具体的错误原因给客户端(比如“用户名已存在”等)时,可以调用这个方法,让客户端展示这个自定义的错误消息给用户,告知具体的失败情况。 public static ServerResponse createByErrorMessage(String msg){ return new ServerResponse<>(ResponseEnum.ERROR.getCode(),msg); } + // 这个静态方法用于创建一个带有自定义状态码和错误提示消息的失败响应对象,接收一个整型参数code和一个字符串参数msg,使用传入的状态码和消息来初始化对象,在业务操作失败且需要根据具体的业务场景返回特定的状态码以及对应的错误消息时(比如不同的业务模块有不同的错误状态码定义等情况),调用这个方法可以构建相应的符合要求的失败响应对象返回给客户端,方便客户端根据状态码和消息进行相应的处理,如提示用户、进行不同的错误提示展示等。 public static ServerResponse createByErrorCodeMessage(int code,String msg){ return new ServerResponse<>(code,msg); } -} +} \ No newline at end of file