class Flight {
String airportIata;
}
class FlightDto {
// 默认开启缓存并且存活时间为60s,根据业务需要可以灵活配置
@DictMapping(key="IATA", resolver=AirportDictDataResolver.class)
@Mapping(field="airportIata")
String airport;
}
// 此处仅作为示例,实际使用时一般通过依赖数据服务获取数据,然后将结果转换为Map
public class AirportDictDataResolver implements DictDataResolver {
@Override
public Map<Object, Object> resolve(String key) {
if (key.equals("IATA")) {
Map<Object, Object> data = new HashMap<>();
data.put("TAO", "青岛");
data.put("DLC", "大连");
data.put("SHE", "沈阳");
return data;
} else {
Map<Object, Object> data = new HashMap<>();
data.put("ZSQD", "青岛");
data.put("ZYTL", "大连");
data.put("ZYTX", "沈阳");
return data;
}
}
}
FlightDto flightDto = new FlightDto("青岛")
Flight flight = BeanUtils.copyProperties(flightDto, Flight.class);
System.out.println(flight.getAirportIata()) // "TAO"
字典映射默认开启缓存(默认生命周期60s),可以业务数据需要调整@DictMapping
配置。缓存在生命周期内无法手动失效,如果需要较高的数据一致性,建议禁用缓存,由字典数据源接口实现并管理缓存。
字典映射如果不满足唯一性反向查找(即DictDataResolver
返回的Map
中value
有重复的情况),映射字段必须配置为@Mapping(oneway = true)
(单向拷贝)防止错误的结果。