@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 & Setter public 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() @Override public String toString() { ... } @Override public boolean equals(Object o) { ... } @Override public 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
在编译时通过字节码操作实现以下功能:
移除受检异常要求:让编译器不检查你是否处理或声明了受检异常
异常转换:通过字节码技巧将受检异常作为非受检异常抛出