1
私は数ヶ月間アクカの世界を去りました。明らかに私はモジョを失ってしまったのです。 Acceptヘッダーに基づいて、XMLまたはJSONドキュメントを返すWebサービスを作成しようとしています。Akka-httpでJSONまたはXMLをリクエストする方法は?
しかし、私はMarshallersを動作させることができません(406を返し、text/plainのみを受け入れます)。これは私が持っているものです。
trait MyMarshallers extends DefaultJsonProtocol with SprayJsonSupport with ScalaXmlSupport {
implicit def ec: ExecutionContext
implicit val itemJsonFormat = jsonFormat3(MyPerson)
def marshalCatalogItem(obj: MyPerson): NodeSeq =
<MyPerson>
<id>
{obj.ID}
</id>
<name>
{obj.Name}
</name>
<age>
{obj.Age}
</age>
</MyPerson>
def marshalCatalogItems(items: Iterable[MyPerson]): NodeSeq =
<Team>
{items.map(marshalCatalogItem)}
</Team>
implicit def catalogXmlFormat = Marshaller.opaque[Iterable[MyPerson], NodeSeq](marshalCatalogItems)
implicit def catalogItemXmlFormat = Marshaller.opaque[MyPerson, NodeSeq](marshalCatalogItem)
implicit val catalogMarshaller: ToResponseMarshaller[Iterable[MyPerson]] = Marshaller.oneOf(
Marshaller.withFixedContentType(MediaTypes.`application/json`) { catalog ⇒
HttpResponse(entity = HttpEntity(ContentType(MediaTypes.`application/json`),
catalog.map(i ⇒ MyPerson(i.ID, i.Name, i.Age))
.toJson.compactPrint))
}
,
Marshaller.withOpenCharset(MediaTypes.`application/xml`) { (catalog, charset) ⇒
HttpResponse(entity = HttpEntity.CloseDelimited(ContentType(MediaTypes.`application/xml`, HttpCharsets.`UTF-8`),
Source.fromFuture(Marshal(catalog.map(i => MyPerson(i.ID, i.Name, i.Age)))
.to[NodeSeq])
.map(ns ⇒ ByteString(ns.toString()))
)
)
}
)
}
と私のルートは次のようになります。
class MyService extends MyMarshallers {
implicit val system = ActorSystem("myService")
implicit val materializer = ActorMaterializer()
implicit val ec: ExecutionContext = system.dispatcher
...
def route = ...
(get & path("teams")) {
parameters('name.as[String]) { id =>
complete {
getTeam(id)
}
}
...
}
そして、私は/を要求した場合、/ Iは、プレーンテキストを取得するが、私は、アプリケーション/ xmlまたはアプリケーションを要求した場合json、私は406を取得します。
AKKA-HTTPはどのようなコンテンツタイプを受け入れるのですか?私はすべてをAkka 2.4.6に更新しました。
ヘイウィル!あなたはakkaについて多くの質問をしましたが、答えはめったに受け入れられませんでした。答えがあなたの必要を満たすならば、そうしてください。ユーザーがより多くのことを助けることを奨励します。ありがとう! – expert
私はどこで答えを受け入れなかったのか分かりません。私がしなかったら、それは省略でなければなりません。しかし、答えがないかどうか調べるのに数時間かかることがあります。そして、例えば、私は別の10時間自分の答えを受け入れることはできません。 –
私は過去のいくつかの質問を確認しましたが、私はすべての回答を受け入れました。私は戻ってきて返事を確認する機会がなかった2つを除いて。私に何もない気分にさせてくれてありがとう。 :( –