true, "message"->str)) 无法在play2中编译-6ren"> true, "message"->str)) 无法在play2中编译-这是我的代码: import play.api.mvc._ import play.api.libs.json._ import play.api.libs.json.Json._ import pl-6ren">
gpt4 book ai didi

json - toJson(Map ("success"->true, "message"->str)) 无法在play2中编译

转载 作者:行者123 更新时间:2023-12-01 08:42:16 25 4
gpt4 key购买 nike

这是我的代码:

import play.api.mvc._
import play.api.libs.json._
import play.api.libs.json.Json._
import play.api.libs.json.Writes._

class BaseController extends Controller with Secured with DefaultWrites {

private implicit def str2json(str: String) = new {
def asSuccessJson = toJson(Map("success" -> true, "message" -> str)) // (*)
def asFailedJson = toJson(Map("success" -> false, "message" -> str)) // (*)
}

}

但它不能在两行(*) 上编译。错误信息是:

Multiple markers at this line
- No Json deserializer found for type scala.collection.immutable.Map[java.lang.String,Any]. Try
to implement an implicit Writes or Format for this type.
- not enough arguments for method toJson: (implicit tjs:
play.api.libs.json.Writes[scala.collection.immutable.Map[java.lang.String,Any]])
play.api.libs.json.JsValue.Unspecified value parameter tjs.

我必须把它写成:

def asSuccessJson = toJson(Map("success" -> true.toString, "message" -> str))

注意 true.toString。它有效但无聊。

如何解决?

最佳答案

这很符合逻辑:您尝试将异构映射转换为 JsValue:

Map("success"-> true, "message"-> str) 是一个 Map[String, Any]

不存在能够将 Map[String, Any] 转换为 JsValue 的隐式编写器(而且也不可能有)。

当你编写 Map("success"-> true.toString, "message"-> str) 时,你创建了一个 Map[String, String] 并且有一个编写器。

我会写:

def asSuccessJson = JsObject(Seq("success" -> JsBoolean(true), "message" -> JsString(str))) // (*)

顺便说一句,JSON API肯定会在 Play 2 的下一个版本中“美化”一下......

关于json - toJson(Map ("success"->true, "message"->str)) 无法在play2中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9909515/

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