Scala 通过重写JsonPrinter处理json中的Unicode

Scala 通过重写JsonPrinter处理json中的Unicode,scala,spray,spray-json,Scala,Spray,Spray Json,在尝试Scala/Spray的第一步时,我在Spray json中正确处理unicode时遇到了一个问题 例如:á在json中生成\u00e1。生成的标题指示UTF-8以及正确的设置auf-Dfile.encoding=UTF-8,该设置在Scala的System.properties中显示UTF-8 我找到了一个可能的解决办法 但我很羞愧地承认我不知道如何实现这一点,因为我没有直接处理JsonPrinter。 以下是我所拥有的: JSON协议: object PersonJsonProtoco

在尝试Scala/Spray的第一步时,我在Spray json中正确处理unicode时遇到了一个问题

例如:á在json中生成\u00e1。生成的标题指示UTF-8以及正确的设置auf-Dfile.encoding=UTF-8,该设置在Scala的System.properties中显示UTF-8

我找到了一个可能的解决办法

但我很羞愧地承认我不知道如何实现这一点,因为我没有直接处理JsonPrinter。 以下是我所拥有的:

JSON协议:

object PersonJsonProtocol extends DefaultJsonProtocol {
  implicit object PersonJsonFormat extends RootJsonFormat[Person] {
    def write(per: Person) = JsObject(
        "name" -> JsString(per.name),
        "surname" -> JsString(per.surname),
        "addresses" ->  JsArray(per.addresses.toList.map(_.toJson))
    )
Person类中的简单映射:

val simple = {
    get[String]("person_code") ~
    get[String]("name") ~
    get[String]("surname") map {
    case person_code~name~surname => 
    new Person(person_code, name, surname,  adressDao.findAll(person_code))
    }
  }
路由内的DB呼叫:

ctx: RequestContext => ctx.complete(StatusCodes.OK, personDAO.findAll())  
所以我的问题是,如何在JsonPrinter中覆盖printString方法。
我将感谢任何帮助。提前谢谢你

Spray使用trait
Spray.httpx.PlayJsonSupport提供的封送器来封送播放json值。在该特性中,它为范围内隐式可用的
Writes
类型定义封送器

implicit def playJsonMarshaller[T: Writes](implicit printer: JsValue => String = Json.stringify) = ???
如您所见,至少在版本1.3.1中,您可以通过在作用域中提供隐式的
Function1[JsValue,string]
来覆盖JsValue转换为字符串的方式。例如,在
PersonJsonProtocol
的范围内定义以下方法,使用问题中链接的解决方案作为实现,应该会得到期望的结果

implicit def noUnicodeEscPrettyPrinter(json: JsValue): String = NoUnicodeEscPrettyPrinter(json)

对于后代来说,这是spray json中需要解决的相关问题。@DaveSwartz谢谢。所以唯一的办法似乎是找到一个非官方的解决办法。