Я разрабатываю проект в Spring, и у меня есть файл конфигурации, который отображает области на сайты, что-то вроде:
===========
Areas Mapper
===========
Sites:
USA:
- Arizona
- Florida
- New York
- Texas
Europe:
- Germany
- Russia
- Poland
Теперь я получаю область в качестве параметра из вызова API, и мне нужно вернуть список сайтов на основе этого параметра.
Мне было интересно, правильно ли использовать рефлексию в этом случае для динамического доступа к списку сайтов? и если да, то как бы вы это сделали?
Это то, что я сделал до сих пор:
Класс конфигурации:
@ConfigurationProperties(prefix = "Sites")
@Component
@Data
public class AreasToSitesMapperConfig {
protected List<String> usa;
protected List<String> europe;
protected List<String> australia;
}
Класс картографа:
@Component
public class AreasToSitesMapper {
@Inject
private AreasToSitesMapperConfig areasToSitesMapperConfig;
public List<String> getSitesForArea(String area) throws NoSuchFieldException {
Field field = AreasToSitesMapperConfig.class.getDeclaredField(area);
field.setAccessible(true);
return field.get(this);
//Of course I can implement it as follows, but I'm not sure this is the right way to do it :
if (area == "USA") return areasToSitesMapperConfig.usa ......
}
}
Это звонок из службы:
List<AreaDataDAO> areaDataList = areasRepository.getDataBySiteInAndDateBetweenOrderByDateDesc(
areasToSitesMapper.getSitesForArea(area),
);
Как вы можете видеть, 'area' передается в функцию 'getSitesForArea', и на основе этого параметра мне нужно вернуть соответствующий список.