From edfa2d2cc7618d6f1b59ce40a30d4d302f9c2185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20L=C3=BCneberg?= Date: Thu, 18 Jun 2015 23:29:45 +0800 Subject: [PATCH] =htj #17181 fix objectMapper --- .../http/javadsl/marshallers/jackson/Jackson.scala | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/akka-http-marshallers-java/akka-http-jackson/src/main/scala/akka/http/javadsl/marshallers/jackson/Jackson.scala b/akka-http-marshallers-java/akka-http-jackson/src/main/scala/akka/http/javadsl/marshallers/jackson/Jackson.scala index a3136542a9..96acc714aa 100644 --- a/akka-http-marshallers-java/akka-http-jackson/src/main/scala/akka/http/javadsl/marshallers/jackson/Jackson.scala +++ b/akka-http-marshallers-java/akka-http-jackson/src/main/scala/akka/http/javadsl/marshallers/jackson/Jackson.scala @@ -13,8 +13,11 @@ import akka.http.javadsl.server.{ Unmarshaller, Marshaller } import akka.http.impl.server.{ UnmarshallerImpl, MarshallerImpl } object Jackson { - def json[T <: AnyRef]: Marshaller[T] = _jsonMarshaller.asInstanceOf[Marshaller[T]] - def jsonAs[T](clazz: Class[T]): Unmarshaller[T] = + private val objectMapper: ObjectMapper = new ObjectMapper().enable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY) + def json[T <: AnyRef]: Marshaller[T] = jsonMarshaller(objectMapper).asInstanceOf[Marshaller[T]] + def json[T <: AnyRef](objectMapper: ObjectMapper): Marshaller[T] = jsonMarshaller(objectMapper).asInstanceOf[Marshaller[T]] + def jsonAs[T](clazz: Class[T]): Unmarshaller[T] = jsonAs(objectMapper, clazz) + def jsonAs[T](objectMapper: ObjectMapper, clazz: Class[T]): Unmarshaller[T] = UnmarshallerImpl[T] { (_ec, _flowMaterializer) ⇒ implicit val ec = _ec implicit val mat = _flowMaterializer @@ -23,16 +26,16 @@ object Jackson { unmarshalling.Unmarshaller.stringUnmarshaller .forContentTypes(`application/json`) .map { jsonString ⇒ - val reader = new ObjectMapper().reader(clazz) + val reader = objectMapper.reader(clazz) clazz.cast(reader.readValue(jsonString)) } } }(ClassTag(clazz)) - private val _jsonMarshaller: Marshaller[AnyRef] = + private def jsonMarshaller(objectMapper: ObjectMapper): Marshaller[AnyRef] = MarshallerImpl[AnyRef] { implicit ec ⇒ marshalling.Marshaller.StringMarshaller.wrap(`application/json`) { (value: AnyRef) ⇒ - val writer = new ObjectMapper().enable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY).writer() + val writer = objectMapper.writer() writer.writeValueAsString(value) } }