Java中根据名称拿到实体对应属性的值
如何根据名称定位实体类对应的属性
Java中通常我们的实体类都是英文编码格式,只是通过注释的方式给每个英文属性标注上汉字语义,那么问题来,如果前端传一个汉字名称,如何来匹配上实体类对应的英文属性呢?在实际开发过程中是否以此方式拿到对应属性的值呢?
背景
最近项目中需要开发这么一个功能:前端传入一个汉字名称,需要在后端匹配上某个实体类对应的英文属性,以此就可以获取到对应属性的值。
实现方法流程
一、在后台对应的实体类里对每个属性使用@Column注解,以此方法给每个英文属性标注上对应的汉字语义,如下示例实体类:
import lombok.Data;
import javax.persistence.Column;
@Data
public class TestCar {
//主键唯一id
private Long Id;
@Column(name="指导价格(万元)")
private String guidePrice;
// 车身尺寸
@Column(name="车身尺寸")
private String carSize;
// 轴距
@Column(name="轴距")
private String carWheelbase;
// 最大马力(Ps)
@Column(name="最大马力")
private String maxHorsepower;
// 油耗(L/100km)
@Column(name="油耗(L/100km)")
private String fuelConsumption;
}
二、编写功能测试类
1.代码详情
import java.lang.reflect.Field;
import lombok.extern.slf4j.Slf4j;
import javax.persistence.Column;
import org.apache.commons.lang3.reflect.FieldUtils;
@Slf4j
public class TestController {
public static void main(String[] args) throws IllegalAccessException {
//前端传入的以空格隔开的汉字名称
String str = "指导";
//String str = "马力";
TestCar testCar = new TestCar();
//设置最大马力
testCar.setMaxHorsepower("179");
//设置指导价格
testCar.setGuidePrice("76");
String columnValue1 = null;
Field[] fields = FieldUtils.getAllFields(TestCar.class);
//遍历BuickCarsModels实体类属性,与传入的汉字名称str进行匹配
for(Field f : fields) {
Column columnAnnotation = f.getAnnotation(Column.class);
//使用indexOf()进行匹配,没匹配上即为-1;否则不为-1
if(columnAnnotation != null && columnAnnotation.name().indexOf(str) != -1) {
f.setAccessible(true);
//获取匹配上属性对应的值
columnValue1 = (String) f.get(testCar);
log.info("匹配上的汉字名称:{} 匹配上的英文属性:{} 获取对应属性值:{}",
columnAnnotation.name(), f.getName(), columnValue1);
}
}
}
}
2.效果图
前端传:“指导”字样
前端传:“马力”字样
@Column注解介绍
1.用来标识实体类中属性与数据表中字段的对应关系。
2.Column可以标注在属性前或getter方法前。