[英]How to convert map into DTO
如果有人知道更好的算法来解析和 map NOT JSON字符串到 DTO 而不是这个?
@Getter
@Setter
public class SensorDataDTO {
private String serial;
private Double moisture;
private Integer humidity;
}
SensorDataDTO parseAndMapSensorData(String rawMessage) {
// bad message = "Sensor Connected!";
// or message can be like this "serial=AA12;moisture=3,14;";
// or "serial=AA12;moisture=3,14;humidity=75;";
// or completely different.
if (rawMessage.contains(";")) {
SensorDataDTO sensorDataDTO = new SensorDataDTO();
Map<String, String> mapMessage = Splitter.on(';')
.omitEmptyStrings()
.trimResults()
.withKeyValueSeparator(
Splitter.on('=')
.limit(2)
.trimResults())
.split(rawMessage);
for (Map.Entry<String, String> entry : mapMessage.entrySet()) {
if (serial.equals(entry.getKey()))
sensorDataDTO.setSerial(entry.getValue());
if (secondKey.equals(entry.getKey()))
sensorDataDTO.setMoisture(Double.parseDouble(entry.getValue()));
if (thirdKey.equals(entry.getKey()))
sensorDataDTO.setHumidity(Integer.parseInt(entry.getValue()));
}
return sensorDataDTO;
}
return null;
}
我很欣赏各种信息,但为这种情况添加一些特定的库或依赖项并不有趣。
您可以使用Java 的反射机制。
public SensorDataDTO parseAndMapSensorData() {
SensorDataDTO sensorDataDTO = new SensorDataDTO();
Map<String, Object> mapMessage = new HashMap<>();
mapMessage.put("serial", "AA12");
mapMessage.put("moisture", 3.14);
mapMessage.put("humidity", 75);
//conver map to javabean
Field[] f = sensorDataDTO.getClass().getDeclaredFields();
for (int i = 0; i < f.length; i++) {
f[i].setAccessible(true);
try {
Object value = mapMessage.get(f[i].getName());
f[i].set(sensorDataDTO, value);
} catch (Exception e) {
e.printStackTrace();
}
}
return sensorDataDTO;
}
我更喜欢这个算法,因为它没有任何冗余循环。
SensorDataDTO parseAndMapSensorData(String rawMessage) {
if (rawMessage.contains(";")) {
SensorDataDTO sensorDataDTO = new SensorDataDTO();
Map<String, String> mapMessage = Splitter.on(';')
.omitEmptyStrings()
.trimResults()
.withKeyValueSeparator(
Splitter.on('=')
.limit(2)
.trimResults())
.split(rawMessage);
sensorDataDTO.setSerial(parse(mapMessage, serial));
sensorDataDTO.setMoisture(parseInt(parse(mapMessage, secondKey)));
sensorDataDTO.setHumidity(parseDouble(parse(mapMessage, thirdKey)));
return sensorDataDTO;
}
return null;
}
public static String parse(Map<String, String> mapMessage, String key) {
try {
return String.valueOf(mapMessage.get(key));
} catch (Exception e) {
return null;
}
}
@Getter
@Setter
public class SensorDataDTO {
private String serial;
private Double moisture;
private Integer humidity;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.