【发布时间】:2018-09-28 13:31:05
【问题描述】:
属性名不同时是否可以将map转成pojo?
我将原始输入提取到地图中以获得以下数据。数据可能因消息类型而异。例如:
对于消息类型 = 标准
Map<String, Double> data = new HashMap<>();
data.set('TEMP', 18.33);
data.set('BTNUM', 123);
对于消息类型 = NON_STANDARD
Map<String, Double> data = new HashMap<>();
data.set('GPSLAT', 12.33);
data.set('GPSLON', 42.33);
对于每种消息类型,我都有一个 Java 模型类
@Data
public class StandardMessage {
private String longitude;
private String latitude;
}
@Data
public class NonStandardMessage {
private String temperature;
private String btNumber;
}
目前我正在手动将数据映射到 POJO 类,如下所示
StandardMessage sm = new StandardMessage();
sm.setLongitude(data.get('GPSLON'));
NonStandardMessage nsm = new NonStandardMessage();
nsm.setTemperature(data.get('TEMP'));
是否可以使上述映射通用?即在不知道名称的情况下设置对象属性?
在 Typescript 中,我们可以通过定义如下配置轻松实现这一点:
objectPropertyMapping = new Map();
objectPropertyMapping.set('GPSLAT', 'latitude');
objectPropertyMapping.set('GPSLON', 'longitude');
standardMessage = {};
data.forEach((value: boolean, key: string) => {
standardMessage[ObjectPropertyMapping.get(key)] = data[key];
});
https://stackblitz.com/edit/angular-zjn1kc?file=src%2Fapp%2Fapp.component.ts
我知道 Java 是一种静态类型语言,只是想知道有没有办法像 typescript 一样实现这一点,或者我们必须一直手动映射?
【问题讨论】:
标签: java