@Data
@Data
是一个常用的 Lombok 注解,主要用于 Java 类中,可以自动生成以下内容:
-
Getter(所有字段)
-
Setter(所有非 final 字段)
-
toString()
方法 -
equals()
和hashCode()
方法 -
无参构造函数(如果类中没有其他构造函数)
示例:
import lombok.Data;@Data public class User {private String name;private int age; }
等价于手动编写:
public class User {private String name;private int age;// Getter & Setterpublic String getName() { return name; }public void setName(String name) { this.name = name; }public int getAge() { return age; }public void setAge(int age) { this.age = age; }// toString(), equals(), hashCode()@Overridepublic String toString() { ... }@Overridepublic boolean equals(Object o) { ... }@Overridepublic int hashCode() { ... }// 无参构造public User() {} }
定义业务状态码
public static final Integer RESULT_CODE_SUCCESS = 200;public static final Integer ERROR = 500;public static final Integer RESULT_CODE_FAIL = -1;public static final Integer RESULT_CODE_UN_LOGIN = -2;
作用:定义了 HTTP 响应状态码或业务逻辑结果的常量。
优点:使用
static final
确保不可变性。
深入理解 Spring 的 MethodParameter
类
MethodParameter
是 Spring 框架中一个非常重要的类,它封装了方法参数(或返回类型)的元数据信息。这个类在 Spring MVC、AOP、数据绑定等多个模块中都有广泛应用。
核心功能
MethodParameter
主要提供以下功能:
-
获取参数类型信息 - 包括泛型类型信息
-
获取参数注解 - 包括参数上的注解
-
获取参数名称 - 如果编译时保留了参数名信息
-
获取所属方法或构造器 - 参数所属的方法或构造器信息
MethodParameter
是 Spring 框架中处理方法参数元数据的核心类,它提供了:
完整的类型信息(包括泛型)
注解访问能力
参数名发现能力
方法/构造器上下文信息
主要应用场景
1. Spring MVC 参数解析
2. 响应体处理 (
ResponseBodyAdvice
)3. 数据绑定和验证
常见问题解决
问题1:获取参数名返回null
解决方案:
-
使用 Java 8+ 编译时添加
-parameters
选项 -
或者使用 ASM 库分析字节码:
parameter.initParameterNameDiscovery(new DefaultParameterNameDiscoverer()); String name = parameter.getParameterName();
问题2:泛型类型信息丢失
解决方案:
使用 ResolvableType
代替直接获取 Class 对象:
// 不推荐 - 可能丢失泛型信息 Class<?> type = parameter.getParameterType();// 推荐 - 保留完整泛型信息 ResolvableType type = ResolvableType.forMethodParameter(parameter);
@SneakyThrows
@SneakyThrows
是 Project Lombok 提供的一个实用注解,它允许你"偷偷地"抛出受检异常(checked exceptions),而无需在方法签名中声明它们。
工作原理
@SneakyThrows
在编译时通过字节码操作实现以下功能:
-
移除受检异常要求:让编译器不检查你是否处理或声明了受检异常
-
异常转换:通过字节码技巧将受检异常作为非受检异常抛出