1

我有以下代码和问题。我正在运行一个 Spring Boot 应用程序来测试 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 直接从应用程序属性文件中读取地图?

对此的任何帮助表示赞赏。提前致谢。

4

2 回答 2

2

环境变量始终是字符串。Spring value injector 知道如何将它们转换为 map 的事实非常好,但是当使用 java 环境 api 时,您将不得不自己解析该字符串并将其转换为 Map。

像杰克逊这样的人可能会让这更容易。否则,您可能会编写一个实用方法来执行此操作。您可能会查看 spring 源代码。

于 2018-08-24T14:18:13.773 回答
-1

不要想太多,只需检查您的 pojo 课程。从数据库中获取价值是不同的,来自 pojo 类的字段是不同的。

于 2019-06-25T06:48:39.387 回答