Это вполне логично: вы пытаетесь преобразовать разнородную карту в JsValue:
Map("success" -> true, "message" -> str)
- это Map[String, Any]
.
Не существует неявного средства записи, способного преобразовать Map[String, Any]
в JsValue
(а их не может быть).
Когда вы пишете Map("success" -> true.toString, "message" -> str)
, вы создаете карту [String, String], и для этого есть писатель.
Я бы написал:
def asSuccessJson = JsObject(Seq("success" -> JsBoolean(true), "message" -> JsString(str))) // (*)
Кстати, JSON API непременно будет "украшен" в следующих выпусках Play 2 ...