Я пытаюсь получить объект свойства приложения по значению, я уже сделал это в Java, но по какой-то причине, используя Kotlin, я не могу это сделать.
Итак, в основном у меня есть список свойств приложения, который выглядит следующим образом:
ee.car.config.audi.serial=1
ee.car.config.audi.base=platform1
ee.car.config.bmw.serial=2
ee.car.config.bmw.base=platform2
, так что вы можете видеть идентификаторы автомобилей (audi, bmw, peugeot, et c .. ) являются Dynami c, и мне нужно просто по серийному значению, чтобы получить объект, который представляет конкретную c машину, и по ключу автомобиля (Audi, BMW), чтобы получить все другие свойства.
И что я сделал просто, я создал класс свойств конфигурации следующим образом:
@Configuration
@ConfigurationProperties(prefix = "ee.car")
data class FesEngineKeys(
val config: HashMap<String, EeCarConfigParam> = HashMap()
) {
fun getOrDefaultEEConfig(engineKey: String): EeCarConfigParam? {
return config.getOrDefault(engineKey, config["audi"])
}
А затем объект для сопоставления ключей после динамического c значения:
data class EeCarConfigParam {
var serial: String,
var base: String
}
Но проблема здесь в классе FesEngineKeys , свойство config пусто, похоже, что EeCarConfigParam не может быть отображен.
Также интересная часть, когда я изменяю:
val config: HashMap<String, EeCarConfigParam> = HashMap() to
val config: HashMap<String, String> = HashMap()
, тогда я вижу, что параметр config заполняется всеми значения.
Этот код уже работает в Java и выглядит так:
@Configuration
@Getter
@Setter
@ConfigurationProperties(prefix = "ee.car")
public class FESEngineKeys {
private Map<String, EeCarConfigParam> config = new HashMap<>();
public EeCarConfigParam getOrDefaultEEConfig(String engineKey) {
return config.getOrDefault(engineKey, config.get("audi"));
}
public EeCarConfigParam findBySerial(String serial) {
return config.values().stream().filter(cfg -> cfg.getSerial().equalsIgnoreCase(serial)).findFirst().orElse(null);
}
}
@Data
public class EeCarConfigParam {
private String serial;
private String base;
}
Я действительно не знаю, почему в случае Kotlin он не работает, я вероятно, допустил очень грубую ошибку c, и я бы очень признателен съел, если кто-нибудь может объяснить, что здесь происходит