本文整理汇总了Scala中akka.http.scaladsl.unmarshalling.Unmarshaller类的典型用法代码示例。如果您正苦于以下问题:Scala Unmarshaller类的具体用法?Scala Unmarshaller怎么用?Scala Unmarshaller使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Unmarshaller类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Scala代码示例。
示例1: HttpResponseUtil
//设置package包名称以及导入依赖的类
package com.ulasakdeniz.hakker.ws
import akka.http.scaladsl.model.{HttpEntity, HttpResponse}
import akka.http.scaladsl.unmarshalling.Unmarshaller
import akka.stream.scaladsl.Sink
import akka.util.ByteString
import scala.concurrent.Future
import scala.util.{Failure, Success, Try}
package object http {
implicit final class HttpResponseUtil(responseF: Future[HttpResponse]) extends HttpClientApi {
val entityData: Future[ByteString] =
for {
response <- responseF
byteString <- {
val source = response.entity.dataBytes
source.runWith(Sink.head[ByteString])
}
} yield byteString
def mapStrict[T](f: HttpResponse => T): Future[T] =
for {
response <- responseF
byteString <- entityData
strictEntity = HttpEntity.Strict(response.entity.contentType, byteString)
} yield f(response.withEntity(strictEntity))
def entityAs[T](implicit unmarshaller: Unmarshaller[String, T]): Future[Try[T]] = {
val result = for {
byteString <- entityData
t <- unmarshaller(byteString.utf8String)
} yield Success(t)
result.recover {
case t: Throwable => Failure(t)
}
}
}
}
示例2: PreprocessedFromStringUnmarshaller
//设置package包名称以及导入依赖的类
package akka.http.documenteddsl
import akka.http.scaladsl.marshallers.playjson.PlayJsonSupport.PlayJsonError
import akka.http.scaladsl.model.MediaTypes.`application/json`
import akka.http.scaladsl.server.{RejectionError, ValidationRejection}
import akka.http.scaladsl.unmarshalling.{FromEntityUnmarshaller, FromStringUnmarshaller, Unmarshaller}
import akka.util.ByteString
import play.api.libs.json.{JsError, JsValue, Json, Reads}
class PreprocessedFromStringUnmarshaller[T](sanitize: Preprocess[String], _fsu: FromStringUnmarshaller[T]) {
implicit val fsu: FromStringUnmarshaller[T] = Unmarshaller withMaterializer {
implicit ec =>
implicit mat =>
string =>
_fsu(sanitize(string))
}
}
object PreprocessedFromStringUnmarshaller {
implicit def unmarshaller[T](implicit sanitize: Preprocess[String] = Preprocess.identity, fsu: FromStringUnmarshaller[T]): PreprocessedFromStringUnmarshaller[T] = {
new PreprocessedFromStringUnmarshaller(sanitize, fsu)
}
}
class PreprocessedFromEntityUnmarshaller[T](sanitize: Preprocess[JsValue], reads: Reads[T]) {
private val jsonStringUnmarshaller =
Unmarshaller.byteStringUnmarshaller
.forContentTypes(`application/json`)
.mapWithCharset {
case (ByteString.empty, _) => throw Unmarshaller.NoContentException
case (data, charset) => data.decodeString(charset.nioCharset.name)
}
implicit val fsu: FromEntityUnmarshaller[T] = jsonStringUnmarshaller map { data =>
val json = sanitize(Json parse data)
reads reads json recoverTotal { error =>
throw RejectionError(ValidationRejection(JsError.toJson(error).toString, Some(PlayJsonError(error))))
}
}
}
object PreprocessedFromEntityUnmarshaller {
implicit def unmarshaller[T](implicit sanitize: Preprocess[JsValue] = Preprocess.identity, reads: Reads[T]): PreprocessedFromEntityUnmarshaller[T] = {
new PreprocessedFromEntityUnmarshaller(sanitize, reads)
}
}
trait Preprocess[T] {
def apply(x: T): T
}
object Preprocess {
def identity[T]: Preprocess[T] = new Preprocess[T] {
override def apply(x: T): T = x
}
}
示例3: Marshalling
//设置package包名称以及导入依赖的类
package akka.stream.alpakka.s3.impl
import java.time.Instant
import akka.http.scaladsl.marshallers.xml.ScalaXmlSupport
import akka.http.scaladsl.model.{ContentTypes, HttpCharsets, MediaTypes}
import akka.http.scaladsl.unmarshalling.{FromEntityUnmarshaller, Unmarshaller}
import akka.stream.alpakka.s3.scaladsl.ListBucketResultContents
import scala.xml.NodeSeq
private[alpakka] object Marshalling {
import ScalaXmlSupport._
implicit val multipartUploadUnmarshaller: FromEntityUnmarshaller[MultipartUpload] = {
nodeSeqUnmarshaller(ContentTypes.`application/octet-stream`) map {
case NodeSeq.Empty => throw Unmarshaller.NoContentException
case x =>
MultipartUpload(S3Location((x \ "Bucket").text, (x \ "Key").text), (x \ "UploadId").text)
}
}
implicit val completeMultipartUploadResultUnmarshaller: FromEntityUnmarshaller[CompleteMultipartUploadResult] = {
nodeSeqUnmarshaller(MediaTypes.`application/xml` withCharset HttpCharsets.`UTF-8`) map {
case NodeSeq.Empty => throw Unmarshaller.NoContentException
case x =>
CompleteMultipartUploadResult(
(x \ "Location").text,
(x \ "Bucket").text,
(x \ "Key").text,
(x \ "ETag").text.drop(1).dropRight(1)
)
}
}
val isTruncated = "IsTruncated"
val continuationToken = "NextContinuationToken"
implicit val listBucketResultUnmarshaller: FromEntityUnmarshaller[ListBucketResult] = {
nodeSeqUnmarshaller(MediaTypes.`application/xml` withCharset HttpCharsets.`UTF-8`).map {
case NodeSeq.Empty => throw Unmarshaller.NoContentException
case x =>
ListBucketResult(
(x \ isTruncated).text == "true",
Some(x \ continuationToken).filter(_.nonEmpty).map(_.text),
(x \\ "Contents").map { c =>
ListBucketResultContents(
(x \ "Name").text,
(c \ "Key").text,
(c \ "ETag").text.drop(1).dropRight(1),
(c \ "Size").text.toLong,
Instant.parse((c \ "LastModified").text),
(c \ "StorageClass").text
)
}
)
}
}
}
示例4: RandomAuthService
//设置package包名称以及导入依赖的类
package com.rndmi.messaging.auth
import java.util.logging.Logger
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
import akka.http.scaladsl.unmarshalling.Unmarshaller
import akka.stream.ActorMaterializer
import com.typesafe.config.ConfigFactory
import io.bigfast.messaging.MessagingServer._
import io.bigfast.messaging.auth.AuthService
import io.grpc.Metadata
import spray.json.{JsonParser, ParserInput}
class RandomAuthService extends AuthService {
import RandomAuthService._
override def doAuth(metadata: Metadata) = {
val authorization = metadata.get[String](authorizationKey)
val session = metadata.get[String](sessionKey)
logger.info(s"Checking auth for $authorization, $session")
val httpResponse = http.singleRequest(
HttpRequest(uri = uri).withHeaders(
AuthorizationHeader(authorization),
SessionHeader(session)
)
)(materializer)
httpResponse flatMap { response =>
val responseEntity = response.entity
val eventualRandomResponse = unmarshaller.apply(responseEntity)
logger.info(s"Parsed this response: $eventualRandomResponse")
eventualRandomResponse
} map { resp =>
resp.data.userId.toString
}
}
}
object RandomAuthService extends JsonSupport {
val authorizationKey = Metadata.Key.of("AUTHORIZATION", Metadata.ASCII_STRING_MARSHALLER)
val sessionKey = Metadata.Key.of("X-AUTHENTICATION", Metadata.ASCII_STRING_MARSHALLER)
val http = Http()
val uri = ConfigFactory.load().getString("auth.uri")
implicit val materializer = ActorMaterializer()
val logger = Logger.getLogger(this.getClass.getName)
val unmarshaller: Unmarshaller[HttpEntity, RandomResponse] = {
Unmarshaller.byteArrayUnmarshaller mapWithCharset { (data, charset) =>
JsonParser(ParserInput(data)).asJsObject.convertTo[RandomResponse]
}
}
}
示例5: deleteAll
//设置package包名称以及导入依赖的类
package mesosphere.marathon.core.storage.store.impl
import java.time.OffsetDateTime
import akka.Done
import akka.http.scaladsl.marshalling.Marshaller
import akka.http.scaladsl.unmarshalling.Unmarshaller
import mesosphere.marathon.core.storage.store.{ IdResolver, PersistenceStore }
import mesosphere.marathon.state.StateMetrics
import scala.concurrent.Future
trait TimedPersistenceStore[K, Category, Serialized] extends StateMetrics {
self: PersistenceStore[K, Category, Serialized] =>
override def deleteAll[Id, V](k: Id)(implicit ir: IdResolver[Id, V, Category, K]): Future[Done] =
timedWrite(self.deleteAll(k))
override def get[Id, V](id: Id)(implicit
ir: IdResolver[Id, V, Category, K],
um: Unmarshaller[Serialized, V]): Future[Option[V]] =
timedRead(self.get(id))
override def get[Id, V](
id: Id,
version: OffsetDateTime)(implicit
ir: IdResolver[Id, V, Category, K],
um: Unmarshaller[Serialized, V]): Future[Option[V]] =
timedRead(self.get(id, version))
override def store[Id, V](id: Id, v: V)(implicit
ir: IdResolver[Id, V, Category, K],
m: Marshaller[V, Serialized]): Future[Done] =
timedWrite(self.store(id, v))
override def store[Id, V](id: Id, v: V,
version: OffsetDateTime)(implicit
ir: IdResolver[Id, V, Category, K],
m: Marshaller[V, Serialized]): Future[Done] =
timedWrite(self.store(id, v, version))
override def deleteCurrent[Id, V](k: Id)(implicit ir: IdResolver[Id, V, Category, K]): Future[Done] =
timedWrite(self.deleteCurrent(k))
override def deleteVersion[Id, V](
k: Id,
version: OffsetDateTime)(implicit ir: IdResolver[Id, V, Category, K]): Future[Done] =
timedWrite(self.deleteVersion(k, version))
}
示例6: PersistenceStoreVersionedRepository
//设置package包名称以及导入依赖的类
package mesosphere.marathon.core.storage.repository.impl
import java.time.OffsetDateTime
import akka.http.scaladsl.marshalling.Marshaller
import akka.http.scaladsl.unmarshalling.Unmarshaller
import akka.stream.scaladsl.Source
import akka.{ Done, NotUsed }
import mesosphere.marathon.core.storage.repository.{ Repository, VersionedRepository }
import mesosphere.marathon.core.storage.store.{ IdResolver, PersistenceStore }
import scala.concurrent.Future
class PersistenceStoreVersionedRepository[Id, V, K, C, S](
persistenceStore: PersistenceStore[K, C, S],
extractId: V => Id,
extractVersion: V => OffsetDateTime)(implicit
ir: IdResolver[Id, V, C, K],
marshaller: Marshaller[V, S],
unmarshaller: Unmarshaller[S, V]) extends PersistenceStoreRepository[Id, V, K, C, S](
persistenceStore,
extractId) with VersionedRepository[Id, V] {
override def versions(id: Id): Source[OffsetDateTime, NotUsed] = persistenceStore.versions(id)
override def getVersion(id: Id, version: OffsetDateTime): Future[Option[V]] =
persistenceStore.get(id, version)
override def storeVersion(v: V): Future[Done] =
persistenceStore.store(extractId(v), v, extractVersion(v))
override def deleteCurrent(id: Id): Future[Done] =
persistenceStore.deleteCurrent(id)
}
示例7: CoordinateFormat
//设置package包名称以及导入依赖的类
package model
import akka.http.scaladsl.unmarshalling.Unmarshaller
import base.CaseObjectSerializationSupport
import mapdomain.graph.Coordinate
import mapdomain.sidewalk.Ramp
import spray.json.{ DefaultJsonProtocol, DeserializationException, JsNumber, JsObject, JsString, JsValue, RootJsonFormat }
trait ModelFormatter extends DefaultJsonProtocol with CaseObjectSerializationSupport {
implicit object CoordinateFormat extends RootJsonFormat[Coordinate] {
def write(c: Coordinate) = JsObject(
"lat" -> JsNumber(c.latitude),
"lng" -> JsNumber(c.longitude))
def read(value: JsValue) = value.asJsObject.getFields("lat", "lng") match {
case Seq(JsNumber(latitude), JsNumber(longitude)) ?
Coordinate(latitude.toDouble, longitude.toDouble)
case _ ? throw DeserializationException("Coordinate expected")
}
}
implicit object PathCoordinateFormat extends RootJsonFormat[PathCoordinate] {
def write(pc: PathCoordinate) =
if (pc.street.isDefined)
JsObject(
"lat" -> JsNumber(pc.coordinate.latitude),
"lng" -> JsNumber(pc.coordinate.longitude),
"street" -> JsString(pc.street.get))
else
JsObject(
"lat" -> JsNumber(pc.coordinate.latitude),
"lng" -> JsNumber(pc.coordinate.longitude))
def read(value: JsValue) = value.asJsObject.getFields("lat", "lng", "street") match {
case Seq(JsNumber(latitude), JsNumber(longitude), JsString(street)) ?
PathCoordinate(Coordinate(latitude.toDouble, longitude.toDouble), Some(street))
case Seq(JsNumber(latitude), JsNumber(longitude)) ?
PathCoordinate(Coordinate(latitude.toDouble, longitude.toDouble))
case _ ? throw DeserializationException("PathCoordinate expected")
}
}
implicit val EdgeTypeFormat = caseObjectJsonFormat[EdgeType](StreetEdgeType, SidewalkEdgeType, StreetCrossingEdgeType)
implicit val VertexTypeFormat = caseObjectJsonFormat[VertexType](StreetVertexType, SidewalkVertexType)
implicit val ReportableElementTypeFormat = caseObjectJsonFormat[ReportableElementType](RAMP, SIDEWALK)
implicit val RampFormat = jsonFormat4(Ramp.apply)
implicit val EdgeFormat = jsonFormat4(Edge.apply)
implicit val VertexFormat = jsonFormat3(Vertex.apply)
implicit val MapContainerFormat = jsonFormat2(MapContainer.apply)
implicit val StreetFormat = jsonFormat3(Street.apply)
implicit val SidewalkFormat = jsonFormat2(Sidewalk.apply)
implicit val ReportableElementFormat = jsonFormat6(ReportableElement.apply)
implicit val StopFormat = jsonFormat4(Stop.apply)
implicit val PublicTransportPathFormat = jsonFormat4(PublicTransportPath)
implicit val StopCombinationFormat = jsonFormat6(PTCombination.apply)
implicit val EdgeTypeUnmarshaller = Unmarshaller.strict[String, EdgeType](EdgeTypeFormat.mapping)
}
示例8: unmarshaller
//设置package包名称以及导入依赖的类
package com.github.bots4s.telegramkit.client
import akka.http.scaladsl.marshalling.{Marshaller, Marshalling, ToEntityMarshaller}
import akka.http.scaladsl.model.{ContentTypes, HttpEntity, MediaTypes, Multipart}
import akka.http.scaladsl.unmarshalling.{FromEntityUnmarshaller, Unmarshaller}
import com.github.bots4s.telegramkit.marshalling.{BotMarshaller, BotUnmarshaller}
import com.github.bots4s.telegramkit.method.{BotApiRequest, BotApiRequestJson, BotApiRequestMultipart}
import com.github.bots4s.telegramkit.model._
private[client] trait HttpMarshalling { this: BotApiClient =>
implicit def unmarshaller[T: Manifest](implicit um: BotUnmarshaller[T]): FromEntityUnmarshaller[T] = {
Unmarshaller.stringUnmarshaller.map(body => um(body))
}
implicit def marshaller[T](implicit m: BotMarshaller[BotApiRequestJson[T]]): ToEntityMarshaller[BotApiRequest[T]] = {
Marshaller.strict {
case request: BotApiRequestJson[T] =>
val content = m(request)
Marshalling.Opaque(() => HttpEntity(ContentTypes.`application/json`, content))
case request: BotApiRequestMultipart[T] =>
def flatten(value: Any): Any = value match {
case Some(x) => flatten(x)
case e: Either[_, _] => flatten(e.fold(identity, identity))
case _ => value
}
val fields = request.getClass.getDeclaredFields.iterator.zip(request.productIterator).map {
case (k, v) => HttpMarshalling.snakeCase(k.getName) -> flatten(v)
}.filterNot(_._2 == None)
if (fields.isEmpty) {
Marshalling.Opaque(() => HttpEntity.empty(ContentTypes.`application/octet-stream`))
} else {
val parts = fields map {
case (k, v @ (_: String | _: Boolean | _: Long | _: Float)) =>
Multipart.FormData.BodyPart(k, HttpEntity(v.toString))
case (k, InputFile.InputFilePath(path)) =>
Multipart.FormData.BodyPart.fromPath(k, MediaTypes.`application/octet-stream`, path)
case (k, InputFile.InputFileData(filename, bs)) =>
Multipart.FormData.BodyPart(k, HttpEntity(ContentTypes.`application/octet-stream`, bs), Map("filename" -> filename))
case (k, other) =>
log.warning(s"unexpected field in multipart request, $k: $other")
Multipart.FormData.BodyPart(k, HttpEntity(""))
}
Marshalling.Opaque(() => Multipart.FormData(parts.toSeq: _*).toEntity())
}
}
}
}
private[client] object HttpMarshalling {
private val CapitalLetter = "[A-Z]".r
def snakeCase(s: String): String =
CapitalLetter.replaceAllIn(s, { "_" + _.group(0).toLowerCase })
}
示例9: ZeroFormatterSupport
//设置package包名称以及导入依赖的类
package zeroformatter.akka.http
import akka.http.scaladsl.marshalling.{Marshaller, ToEntityMarshaller}
import akka.http.scaladsl.model.MediaTypes.`application/octet-stream`
import akka.http.scaladsl.unmarshalling.{FromEntityUnmarshaller, Unmarshaller}
import zeroformatter._
object ZeroFormatterSupport extends ZeroFormatterSupport {
override def serialize[A: Formatter](value: A) = unsafe.ZeroFormatter.serialize(value)
override def deserialize[A: Formatter](bytes: Array[Byte]) = unsafe.ZeroFormatter.deserialize[A](bytes)
}
trait ZeroFormatterSupport {
def serialize[A: Formatter](value: A): Array[Byte]
def deserialize[A: Formatter](bytes: Array[Byte]): A
private val zeroFormatterUnmarshaller =
Unmarshaller.byteArrayUnmarshaller
.forContentTypes(`application/octet-stream`)
.map {
case Array() => throw Unmarshaller.NoContentException
case data => data
}
private val zeroFormatterMarshaller = Marshaller.byteArrayMarshaller(`application/octet-stream`)
implicit def unmarshaller[A: Formatter]: FromEntityUnmarshaller[A] = {
zeroFormatterUnmarshaller
.map(bs => deserialize(bs))
}
implicit def marshaller[A: Formatter]: ToEntityMarshaller[A] =
zeroFormatterMarshaller
.compose(v => serialize(v))
}
示例10: upickleJsValueMarshaller
//设置package包名称以及导入依赖的类
package com.thoughtworks.akka.http
import akka.http.scaladsl.model.{MediaTypes, _}
import akka.http.scaladsl.server.Directives._
import com.thoughtworks.Extractor._
import scala.concurrent.Future
import akka.http.scaladsl.marshalling.Marshaller
import akka.http.scaladsl.unmarshalling.Unmarshaller
trait RpcSupport extends autowire.Server[upickle.Js.Value, upickle.default.Reader, upickle.default.Writer] {
implicit private def upickleJsValueMarshaller = {
Marshaller.StringMarshaller.wrap[upickle.Js.Value, MessageEntity](MediaTypes.`application/json`)(_.toString)
}
implicit private def upickleJsValueUnmarshaller = {
Unmarshaller.stringUnmarshaller.map(upickle.json.read)
}
final def write[Result](r: Result)(implicit writer: upickle.default.Writer[Result]) = {
writer.write(r)
}
final def read[Result](p: upickle.Js.Value)(implicit reader: upickle.default.Reader[Result]) = {
reader.read(p)
}
final def rpc(packagePrefix: String*)(routes: PartialFunction[Request, Future[upickle.Js.Value]]) = {
path(Segments) { segments =>
entity(as[upickle.Js.Value]) {
case upickle.Js.Obj([email protected]_*) =>
autowire.Core.Request(packagePrefix ++ segments, keyValuePairs.toMap) match {
case routes.extract(response) =>
complete {
response
}
case _ =>
reject
}
case _ =>
complete(HttpResponse(StatusCodes.BadRequest))
}
}
}
}
object RpcSupport extends RpcSupport
示例11: Mapper
//设置package包名称以及导入依赖的类
package org.akka.templates
import akka.http.scaladsl.marshalling.Marshaller.withFixedContentType
import akka.http.scaladsl.marshalling.ToEntityMarshaller
import akka.http.scaladsl.model.{ContentTypes, HttpEntity, HttpRequest}
import akka.http.scaladsl.unmarshalling.{FromRequestUnmarshaller, Unmarshal, Unmarshaller}
import akka.stream.Materializer
import com.fasterxml.jackson.annotation.JsonInclude.Include
import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper, PropertyNamingStrategy}
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import scala.concurrent.ExecutionContext
package object json {
val objectMapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.setSerializationInclusion(Include.NON_EMPTY)
.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
.registerModule(DefaultScalaModule)
implicit class ObjAsJsonUsingJackson(obj: Any) {
def asJson: String = objectMapper.writeValueAsString(obj)
}
implicit class StringJsonAsCaseClass(json: String) {
def asObject[T](implicit m: Manifest[T]): T = objectMapper.readValue(json, m.runtimeClass).asInstanceOf[T]
}
implicit def jsonMarshaller[T]: ToEntityMarshaller[T] =
withFixedContentType(ContentTypes.`application/json`) { any =>
HttpEntity(ContentTypes.`application/json`, any.asJson)
}
implicit def jsonUnmarshaller[T](implicit m: Manifest[T], materializer: Materializer): FromRequestUnmarshaller[T] =
Unmarshaller[HttpRequest, T] {
implicit ec: ExecutionContext => r => Unmarshal(r.entity).to[String].map(_.asObject[T])
}
}
示例12: SpeedMeasurement
//设置package包名称以及导入依赖的类
package com.packt.chapter9
import akka.http.scaladsl.marshalling.{Marshaller, _}
import akka.http.scaladsl.model._
import akka.http.scaladsl.unmarshalling.{Unmarshaller, _}
object SpeedMeasurement {
def unmarshall(str: String) = {
str.split("\\s") match {
case Array(timestamp, latitude, longitude, value) =>
SpeedMeasurement(timestamp.toLong, latitude.toDouble, longitude.toDouble, value.toDouble)
}
}
}
case class SpeedMeasurement(timestamp: Long, latitude: Double, longitude: Double, value: Double) {
val marshall = s"$timestamp $latitude $longitude $value"
}
trait SpeedMeasurementMarshallingHelper {
val contentType = ContentType(MediaTypes.`text/tab-separated-values`, HttpCharsets.`UTF-8`)
implicit val utf8TextSpaceMarshaller: ToEntityMarshaller[SpeedMeasurement] =
Marshaller.withFixedContentType(contentType) { speedMeasurement ? HttpEntity(contentType, speedMeasurement.marshall) }
implicit val utf8TextSpaceUnmarshaller: FromEntityUnmarshaller[SpeedMeasurement] =
Unmarshaller.stringUnmarshaller.map(SpeedMeasurement.unmarshall)
}
示例13: Marshalling
//设置package包名称以及导入依赖的类
package com.bluelabs.s3stream
import akka.http.scaladsl.marshallers.xml.ScalaXmlSupport
import akka.http.scaladsl.model.{ContentTypes, HttpCharsets, MediaTypes}
import akka.http.scaladsl.unmarshalling.{FromEntityUnmarshaller, Unmarshaller}
import scala.xml.NodeSeq
object Marshalling {
import ScalaXmlSupport._
implicit val MultipartUploadUnmarshaller: FromEntityUnmarshaller[MultipartUpload] = {
nodeSeqUnmarshaller(ContentTypes.`application/octet-stream`) map {
case NodeSeq.Empty => throw Unmarshaller.NoContentException
case x =>
MultipartUpload(S3Location((x \ "Bucket").text, (x \ "Key").text), (x \ "UploadId").text)
}
}
implicit val completeMultipartUploadResultUnmarshaller: FromEntityUnmarshaller[CompleteMultipartUploadResult] = {
nodeSeqUnmarshaller(MediaTypes.`application/xml` withCharset HttpCharsets.`UTF-8`) map {
case NodeSeq.Empty => throw Unmarshaller.NoContentException
case x =>
CompleteMultipartUploadResult(
(x \ "Location").text,
(x \ "Bucket").text, (x \ "Key").text,
(x \ "Etag").text
)
}
}
}
示例14: gencodecMarshaller
//设置package包名称以及导入依赖的类
package io.udash.web.guide.rest
import akka.http.scaladsl.marshalling.Marshaller
import akka.http.scaladsl.model.HttpEntity.Strict
import akka.http.scaladsl.model.{HttpEntity, MediaTypes}
import akka.http.scaladsl.unmarshalling.Unmarshaller
import com.avsystem.commons.serialization.GenCodec
import io.udash.rpc.DefaultUdashSerialization
trait HttpSerializationUtils extends DefaultUdashSerialization {
implicit def gencodecMarshaller[T](implicit codec: GenCodec[T]): Marshaller[T, Strict] =
Marshaller.withFixedContentType(MediaTypes.`application/json`)(
(obj: T) => {
var string: String = null
val output = outputSerialization((serialized) => string = serialized)
codec.write(output, obj)
HttpEntity(MediaTypes.`application/json`, string)
}
)
implicit def gencodecUnmarshaller[T](implicit codec: GenCodec[T]): Unmarshaller[HttpEntity, T] =
Unmarshaller
.stringUnmarshaller
.forContentTypes(MediaTypes.`application/json`)
.map(data => codec.read(inputSerialization(data)))
}
示例15: element2Json
//设置package包名称以及导入依赖的类
package $package$.svc
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport
import akka.http.scaladsl.marshalling._
import akka.http.scaladsl.model.MessageEntity
import akka.http.scaladsl.unmarshalling.{FromEntityUnmarshaller, PredefinedFromEntityUnmarshallers, Unmarshaller}
import com.microworkflow.domain.Element
import com.microworkflow.svc.ElementJsonProtocol._
import spray.json._
trait JsonMarshalling extends SprayJsonSupport with DefaultJsonProtocol {
def element2Json(e: Element): JsObject =
JsObject(Map("id" ? JsString(e.id.toString), "timestamp" ? JsNumber(e.timestamp)))
implicit def element2MessageEntity: Marshaller[Element, MessageEntity] = Marshaller.combined(element2Json)
implicit val rawElementFromEntityUnmarshaller: FromEntityUnmarshaller[Element] =
PredefinedFromEntityUnmarshallers.stringUnmarshaller.map(s ? {
val jsonAst = JsonParser(s)
jsonAst.convertTo[Element]
})
}