Derleyici hatası, Finch'in en son sürümünde (0.10) biraz daha iyi.
scalaVersion := "2.11.7"
libraryDependencies += "com.github.finagle" %% "finch-core" % "0.10.0"
Ve bu kurulumu: biz şu inşa yapılandırma varsa Ardından
import com.twitter.finagle.Http
import io.finch._
case class User(id: String, name: String)
def getAllUsers(): List[User] = List(User("111", "Foo McBar"))
val getUsers: Endpoint[List[User]] = get("users") { Ok(getAllUsers()) }
biz toService
kullanmayı deneyin, aşağıdaki olsun:
<console>:18: error: You can only convert a router into a Finagle service if the
result type of the router is one of the following:
* A Response
* A value of a type with an EncodeResponse instance
* A coproduct made up of some combination of the above
List[User] does not satisfy the requirement. You may need to provide an
EncodeResponse instance for List[User] (or for some part of List[User]).
Http.serve(":8080", getUsers.toService)
^
sorun olduğunu Finch'e, User
türünün örneklerini HTTP yanıtlarına nasıl çevireceğini söylemediniz. Finch'in EncodeResponse
, Scala'da (standart kitaplık dahil) yaygın olarak kullanılan polimorfizme ve diğer birçok statik olarak yazılan işlevsel programlama dillerine bir yaklaşım olan bir type class örneğidir.
libraryDependencies ++= Seq(
"io.circe" %% "circe-generic" % "0.3.0",
"com.github.finagle" %% "finch-circe" % "0.10.0"
)
Ve sonra gereken tüm aşağıdaki ithalatı ise:
import io.finch.circe._, io.circe.generic.auto._
Ve toService
uygun EncodeResponse
örneklerini sunmak için en kolay yolu sürüme Finch'in Circe uyumluluk modülü eklemektir sadece iyi çalışır:
scala> Http.serve(":8080", getUsers.toService)
Feb 26, 2016 8:32:24 AM com.twitter.finagle.Init$$anonfun$1 apply$mcV$sp
INFO: Finagle version 6.33.0 (rev=21d0ee8b5070b735eda5c84d7aa6fbf1ba7b1635) built at 20160203-202859
res2: com.twitter.finagle.ListeningServer = Group(/0:0:0:0:0:0:0:0:8080)
Eğer
http://localhost:8080/users
giderseniz
Şimdi, şunları görürsünüz:
[{"id":"111","name":"Foo McBar"}]
Bu sihir gibi görünüyor, ama ne oluyor oldukça ilkeli olduğunu. Circe, derleme zamanında JSON değerleri olarak örnek sınıflarınızı nasıl temsil edeceğinizi anlatan genel kodek türetimi sağlayan bir JSON kitaplığıdır (daha fazla içerik için blogumun here konusuna bakın).
Finch cookbook, bu gibi sorular hakkında daha fazla bilgi edinmek için mükemmel bir kaynaktır ve ilk bölüm, gereksinimlerinin olduğu EncoderResponse
örneklerini sağlamanın diğer yolları hakkında ayrıntılı olarak incelenir. Başka sorularınız varsa veya yukarıdakilerden herhangi biri açık değilse, burada veya Gitter numaralı telefondan soru sormaya çekinmeyin.
Teşekkür ederim Travis! –
Çok teşekkür ederim! – NikitaAbrosimov
, io.finch.circe._, io.circe.generic.auto._ dosyasını içe aktardıktan sonra bile, scala ide yöntemi için yeterli argümanlar hakkında şikâyette bulunuyor: _. başka önerileriniz var mı? – Rjk