无法从字符串转换为哈希映射弹簧启动应用程序



我有以下代码和问题。我正在运行一个 Spring 启动应用程序来测试应用程序.属性文件的使用情况。

应用程序属性文件,

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";
}
}

现在当我点击网址时:http://localhost:8080/HelloWorldBoot/hello

使用@Value成功打印的地图详细信息,

myMapUsingValue : {key1=value1, key2=value2} 

但是在使用环境 API 访问同一地图时出现如下错误,

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

我该如何解决这个问题?如何使用环境变量 API 直接从应用程序属性文件中读取映射?

对此的任何帮助不胜感激。提前谢谢。

环境变量始终是字符串。 Spring 值注入器知道如何将它们转换为映射这一事实非常好,但是在使用 java 环境 api 时,您将不得不自己解析该字符串并将其转换为 Map。

像杰克逊这样的事情可能会让这变得更容易。 否则,您可以编写一个实用工具方法来执行此操作。 你可以看看春天的源头。

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

最新更新