Spring Boot 自定义响应工具类

Serializable接口详解

Serializable是 Java 中的一个标记接口,用于表示一个类的对象可以被序列化。
 
序列化是将对象的状态信息转换为可以存储或传输的形式的过程。通常,当需要把对象的状态通过网络进行传输,或者将对象的状态信息持久化到文件或数据库中以便将来使用时,就需要对对象进行序列化。
 
实现Serializable接口的类具有以下特点:
    • 标记接口:Serializable接口没有定义任何方法,它只是一个标记,用于告诉 Java 运行时系统,该类的对象可以被序列化。
    • 版本控制:通过显式声明一个serialVersionUID字段,Java 提供了对序列化对象的版本控制。如果没有自己声明serialVersionUID,接口会默认生成一个,但强烈建议用户自定义一个serialVersionUID,因为默认生成的对于类的细节非常敏感,反序列化时可能会导致InvalidClassException这个异常。在序列化的时候,系统会将serialVersionUID写入到字节流中,当反序列化时,系统会先检测字节流中的serialVersionUID是否跟类中的一致,如果一致则反序列化成功,否则说明序列化后类发生了变化,反序列化时就会产生异常。
    • 非瞬态字段:只有非瞬态(non-transient)和非静态(non-static)字段才会被序列化。如果一个字段被标记为transient,那么它将被忽略,不会被序列化。
    • 继承关系:如果一个类实现了Serializable,那么它的所有子类也都可以被序列化,除非子类自己声明了serialVersionUID但未实现Serializable
    • 安全性:序列化涉及到对象的内部状态,因此可能存在安全风险。只有信任的数据源和类才应该被反序列化。
    • 性能考虑:序列化是一个相对昂贵的操作,因为它涉及到对象的深拷贝和可能的类型转换。在性能敏感的应用中,应谨慎使用。
要使一个类可序列化,只需让该类实现Serializable接口即可,通常不需要实现任何特定的方法。以下是一个简单的示例代码:

 

工具类 相应工具 Response.java

复制代码
 1 import lombok.Data;
 2 
 3 import java.io.Serializable;
 4 
 5 /**
 6  * @author :君妄
 7  * @description: 响应参数工具类
 8  **/
 9 @Data
10 public class Response<T> implements Serializable {
11 
12     //是否成功 默认为true
13     private boolean success = true;
14     //响应消息
15     private String message;
16     //异常类
17     private String errorCode;
18     //相应数据
19     private T data;
20 
21     //====成功响应=====
22     public static <T> Response<T> success(){
23         Response<T> response = new Response<>();
24         return response;
25     }
26 
27     public static <T> Response<T> success(T data){
28         Response<T> response = new Response<T>();
29         response.setData(data);
30         return response;
31     }
32 
33     //===响应失败
34     public static <T> Response<T> fail(){
35         Response<T> response = new Response<>();
36         response.setSuccess(false);
37         return response;
38     }
39 
40     public static <T> Response<T> fail(String errorMessage){
41         Response<T> response = new Response<>();
42         response.setSuccess(false);
43         response.setMessage(errorMessage);
44         return response;
45     }
46 
47     public static <T> Response<T> fail(String errorMessage, String errorCode){
48         Response<T> response = new Response<>();
49         response.setSuccess(false);
50         response.setErrorCode(errorCode);
51         response.setMessage(errorMessage);
52         return response;
53     }
54 
55 }
复制代码

 

posted @   abababiubiu  阅读(17)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示