|
在Spring Boot中访问带有下划线的私有字段(如bandwidth_number),以下是完整的解决方案:
标准JavaBean规范方案(推荐):
在Bean类中添加规范的getter方法,Spring会自动处理下划线命名:
public class NetworkConfig {
private Integer bandwidth_number;
// 使用@JsonProperty确保序列化/反序列化正确
@JsonProperty("bandwidth_number")
public Integer getBandwidth_number() {
return this.bandwidth_number;
}
// 对应的setter
public void setBandwidth_number(Integer bandwidth_number) {
this.bandwidth_number = bandwidth_number;
}
}
反射工具类方案(特殊场景使用):
创建FieldAccessUtils工具类:
import java.lang.reflect.Field;
public class FieldAccessUtils {
public static Object getFieldValue(Object obj, String fieldName) {
try {
Field field = obj.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
return field.get(obj);
} catch (Exception e) {
throw new RuntimeException("Field access failed", e);
}
}
}
// 使用方式
Integer value = (Integer) FieldAccessUtils.getFieldValue(config, "bandwidth_number");
Spring表达式语言方案(SpEL):
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
ExpressionParser parser = new SpelExpressionParser();
Integer value = parser.parseExpression("bandwidth_number")
.getValue(config, Integer.class);
完整示例项目结构:
src/main/java/com/example/demo/
├── config/
│ ├── NetworkConfig.java # 包含bandwidth_number的Bean
│ └── FieldAccessUtils.java # 反射工具类
└── DemoApplication.java # 主启动类
最佳实践建议:
生产环境优先使用方法1(标准getter)
测试/特殊场景使用方法2(反射工具)
避免直接字段访问破坏封装性
考虑使用Lombok的@Getter/@Setter简化代码
|
|