spring-boot - Kotlin从LinkedHashMap <String,String>转换为String?

标签 spring-boot kotlin

我正在解析一个非常简单的YAML文件。

这是我的代码:

val yaml = Yaml()
val inputStream: InputStream = FileInputStream("permissions.yml")
val obj = yaml.load<LinkedHashMap<String, String>>(inputStream)
println(obj.get("accepted_groups")) // prints [A, B]
val group = obj.get("accepted_groups") // crashes

错误是java.lang.ClassCastException:无法将类java.util.ArrayList强制转换为类java.lang.String
那么println如何管理打印对象?如何从此LinkedHashMap检索数组?

最佳答案

问题在于您的YAML文件中的值不是(全部)字符串。即看起来像

accepted_groups:
    - A
    - B


accepted_groups: "[A, B]"

因此,LinkedHashMap<String, String>只是使用错误的类型。
正确的类型是什么,不知道就不能说:
  • 文件的实际结构;
  • 来自哪个库Yaml类(不是Kotlin标准库,也不是您在标签中提到的Spring Boot)。
  • LinkedHashMap<String, Any>可能会起作用,但不是最佳选择。

    So how does println manage to print the object?



    通过调用toString,就像对任何对象一样。

    问题所在
    val group = obj.get("accepted_groups")
    

    是通过使用LinkedHashMap<String, String>推断的group类型是String,但实际存储的值不是。

    关于spring-boot - Kotlin从LinkedHashMap <String,String>转换为String?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59405080/

    相关文章:

    java - 如何在外部tomcat中部署Spring-boot REST API

    java - 在 Spring Boot 启动器中覆盖 log4j2 版本

    java - Spring Boot : Preload Data and configure H2 for tests. 特殊配置问题

    Android 是否可以有多个 nav_graph 文件?

    android - 使用 Android Studio 中的 Kotlin,如何在没有 for 循环的情况下以 Kotlin 方式通过 ID 将列表添加到另一个列表而不重复项目?

    java - 使用 Reactor 和 WebClient 测试 MVC Controller

    java - 迁移到 Thymeleaf 3 后,Thymeleaf 停止解析布局模板

    generics - 为什么在 "out"位置考虑函数参数中的逆变类型参数?

    android - 启用 safe-args 插件后无法从数据绑定(bind)获取 Root View

    rest - 在Kotlin中修改Swagger Codegen方法的contentHeader