如何指定Jackson ObjectMapper返回的Map精确类型?
Jackson ObjectMapper 直接返回指定泛型Map的方法
你完全可以让ObjectMapper直接返回Map<String, Any>,不用手动强转,下面是几种可行的方法:
使用TypeReference捕获泛型类型
Jackson提供了TypeReference类来解决泛型类型擦除的问题,通过匿名子类的方式可以让ObjectMapper识别到具体的泛型参数:val targetMap = objectMapper.convertValue(this, object : TypeReference<Map<String, Any>>() {})这样返回的结果直接就是
Map<String, Any>类型,不需要额外强转。封装成扩展函数复用
如果需要频繁转换,可以给ObjectMapper写个扩展函数,简化调用:fun ObjectMapper.convertToStrAnyMap(obj: Any): Map<String, Any> { return convertValue(obj, object : TypeReference<Map<String, Any>>() {}) } // 调用示例 val targetMap = objectMapper.convertToStrAnyMap(this)通过JavaType构建类型
也可以用TypeFactory构建具体的Map类型,效果和TypeReference一致:val mapType = objectMapper.typeFactory.constructMapType( Map::class.java, String::class.java, Any::class.java ) val targetMap = objectMapper.convertValue(this, mapType)
这些方法都能帮你摆脱显式强制转换的写法,直接得到符合预期的Map<String, Any>。
内容的提问来源于stack exchange,提问作者agingcabbage32
相关产品推荐
相关产品推荐

