не может конвертировать из String в приложение Spring Boot HashMap

У меня есть код ниже и проблема. Я запускаю загрузочное приложение Spring для проверки использования файла application.properties.

файл application.properties,

server.port=8080
server.servlet.context-path=/HelloWorldBoot

myMap={key1:'value1',key2:'value2'}

Код контроллера ниже,

@RestController
public class MyController {

    @Autowired
    Environment env;

    @Value("#{${myMap}}")  
    private HashMap<String,String> myMapUsingValue;

    @GetMapping("/hello")
    public String hello() {
        System.out.println("myMapUsingValue : "+myMapUsingValue);

        HashMap<String, String> myMapUsingEnv = env.getProperty("myMap", HashMap.class);
        System.out.println("myMapUsingEnv : "+myMapUsingEnv);

        return "Hello World";
    }
}

Теперь, когда я нажимаю URL-адрес: http://localhost:8080/HelloWorldBoot/hello

Детали карты с использованием @Value успешно печатаются,

myMapUsingValue : {key1=value1, key2=value2} 

Но я получаю сообщение об ошибке, как показано ниже, при доступе к той же карте с использованием Environment API,

No converter found capable of converting from type [java.lang.String] to type [java.util.HashMap<?, ?>]]

Как я могу решить эту проблему? Как я могу прочитать карту непосредственно из файла свойств приложения, используя API переменной среды?

Любая помощь приветствуется. Заранее спасибо.


person WebNoob    schedule 24.08.2018    source источник
comment
myMap будет загружен как строка, а не как карта   -  person Nicholas K    schedule 24.08.2018
comment
Попробуйте использовать интерфейс Map, а не реализацию HashMap   -  person akuma8    schedule 24.08.2018


Ответы (2)


Переменные среды всегда являются строками. Тот факт, что инжектор значений Spring знает, как преобразовать их в карту, очень хорош, но при использовании API среды Java вам придется самостоятельно анализировать эту строку и преобразовывать ее в карту.

Что-то вроде Джексона может сделать это проще. В противном случае вы могли бы написать служебный метод, который делает это. Вы можете посмотреть в весеннем источнике.

person Robert Moskal    schedule 24.08.2018
comment
Спасибо за подробности. Кажется, что нет прямого способа получить карту из API среды. Мне пришлось взять эту строку, затем удалить фигурные скобки, затем удалить знак апострофа, а затем разделить строку, чтобы получить пары ключ-значение, а затем поместить их в карту. Ого... Спасибо за предложения. - person WebNoob; 27.08.2018

Не думайте слишком много, просто проверьте свой класс pojo. Получение значения из базы данных отличается, поле из класса pojo отличается.

person James Siva    schedule 25.06.2019