gpt4 book ai didi

java - 如何使用 Play 2.3.9 在 Scala 中将 java.util.Map[String, Object] 序列化为 JSON?

转载 作者:行者123 更新时间:2023-12-01 11:02:03 25 4
gpt4 key购买 nike

我正在使用的客户端库返回一个java.util.Map[String, Object],我希望能够将其序列化为 JSON 并让我的端点返回一个 JSON HTTP回应。

我尝试将其直接传递给 play.api.libs.json.Json.toJson 但出现此编译器错误:

No Json serializer found for type java.util.Map[String,Object]. Try to implement an implicit Writes or Format for this type.

com.google.gson.Gson.toJson 似乎处理得很好,但该方法返回一个字符串,我希望我的端点返回实际的 JSON 和纯文本字符串。

这是我迄今为止最好的:

def endpoint = Action {
val myMap: java.util.Map[String, Object] = service.getResponse
val gsonString: String = new Gson().toJson(myMap)
Ok(Json.parse(gsonString))
}

但这感觉有点像黑客,因为我本质上是序列化(使用 Gson)、反序列化(使用 Play 的 Json),然后再次序列化。

我应该坚持现有的还是有更好的方法来做到这一点?

最佳答案

没有可用于 Map[String,Object] 的隐式 Writes,因为没有可用于其值类型的 Writes对象Object 类型的值可以是 Object 的任何子类型。它相当于Scala 的Any。它的结构在编译时是未知的。 Play 的 Json 序列化仅依赖于编译时已知的信息。

一种解决方案是对类型进行模式匹配并将其转换为更具体的类型,您拥有其 Writes 实例。

另一种方法是简单地使用 gson 输出的 json 字符串,并使用 Ok 结果的 as 方法渲染它,以应用适当的内容类型:好的(gsonString).as(“application/json”)

关于java - 如何使用 Play 2.3.9 在 Scala 中将 java.util.Map[String, Object] 序列化为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33264261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com