From 5cfbfc63ea69f6136a44a1cbea140f5a5ad78741 Mon Sep 17 00:00:00 2001 From: Fehmi Can Saglam Date: Thu, 3 Sep 2015 10:42:22 +0300 Subject: [PATCH] =htp #18389 Fix spray-json unmarshaller utf8 encoding bug --- .../scaladsl/marshallers/sprayjson/SprayJsonSupport.scala | 2 +- .../akka/http/scaladsl/marshallers/JsonSupportSpec.scala | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/akka-http-marshallers-scala/akka-http-spray-json/src/main/scala/akka/http/scaladsl/marshallers/sprayjson/SprayJsonSupport.scala b/akka-http-marshallers-scala/akka-http-spray-json/src/main/scala/akka/http/scaladsl/marshallers/sprayjson/SprayJsonSupport.scala index 57ac42d3e8..6d10f5f8ab 100644 --- a/akka-http-marshallers-scala/akka-http-spray-json/src/main/scala/akka/http/scaladsl/marshallers/sprayjson/SprayJsonSupport.scala +++ b/akka-http-marshallers-scala/akka-http-spray-json/src/main/scala/akka/http/scaladsl/marshallers/sprayjson/SprayJsonSupport.scala @@ -23,7 +23,7 @@ trait SprayJsonSupport { implicit def sprayJsValueUnmarshaller: FromEntityUnmarshaller[JsValue] = Unmarshaller.byteStringUnmarshaller.forContentTypes(`application/json`).mapWithCharset { (data, charset) ⇒ val input = - if (charset == HttpCharsets.`UTF-8`) ParserInput(data.toArray) + if (charset == HttpCharsets.`UTF-8`) ParserInput(data.utf8String) else ParserInput(data.decodeString(charset.nioCharset.name)) // FIXME: identify charset by instance, not by name! JsonParser(input) } diff --git a/akka-http-tests/src/test/scala/akka/http/scaladsl/marshallers/JsonSupportSpec.scala b/akka-http-tests/src/test/scala/akka/http/scaladsl/marshallers/JsonSupportSpec.scala index fef3487c72..0edf33dd3b 100644 --- a/akka-http-tests/src/test/scala/akka/http/scaladsl/marshallers/JsonSupportSpec.scala +++ b/akka-http-tests/src/test/scala/akka/http/scaladsl/marshallers/JsonSupportSpec.scala @@ -19,11 +19,11 @@ object Employee { val simple = Employee("Frank", "Smith", 42, 12345, false) val json = """{"fname":"Frank","name":"Smith","age":42,"id":12345,"boardMember":false}""" - val utf8 = Employee("Fränk", "Smi√", 42, 12345, false) + val utf8 = Employee("Fränk", "Çmi√", 42, 12345, false) val utf8json = """{ | "fname": "Fränk", - | "name": "Smi√", + | "name": "Çmi√", | "age": 42, | "id": 12345, | "boardMember": false