2013-08-22 2 views
1

Просто попробуйте распылитель-json, и, похоже, у меня проблемы с поиском моих JsonProtocols у меня есть настройка. У меня есть следующие зависимости:Маршаллер не найден

"io.spray"    % "spray-servlet" % "1.2-M8", 
"io.spray"    % "spray-routing" % "1.2-M8", 
"io.spray"    % "spray-testkit" % "1.2-M8", 
"io.spray"    % "spray-json_2.10" % "1.2.5" 

И следующий код:

Content.scala

import spray.json.DefaultJsonProtocol 

case class Content(id:String, name: String, contentType: String, duration: Int) 

object MyJsonProtocol extends DefaultJsonProtocol { 
    implicit val contentFormat = jsonFormat4(Content) 
} 

я получаю ошибку на линии, где я возвращающегося Content в complete {} блоке, ошибка заключается в следующем: код

Описание ион ресурсы Пути Расположение Тип не может найти неявное значение для параметра доказательства из типа spray.httpx.marshalling.Marshaller [Содержание] MyService.scala линия 32 Scala проблем

import akka.actor.Actor 
import spray.routing._ 
import spray.http._ 
import MediaTypes._ 
import spray.json.DefaultJsonProtocol 
import Content 
import MyJsonProtocol._ 

class MyServiceActor extends Actor with MyService{ 

    def actorRefFactory = context 

    def receive = runRoute(myRoute) 
} 

trait MyService extends HttpService { 
    val myRoute = 
    path("") { 
     get { 
     respondWithMediaType(`application/json`) { // XML is marshalled to `text/xml` by default, so we simply override here 
      complete { 
      new Content("1234", "Some Content", "YT", 60) 
      } 
     } 
     } 
    } 
} 

Может кто-нибудь увидеть что-нибудь не так? Это буквально спрей-шаблон кода с распылением JSon материал посыпают в

ответ

7

Json маршаллер в SprayJsonSupport черты, так что просто импортировать его в область:

import spray.httpx.SprayJsonSupport._ 

И с этим ИАС вы можете удалить respondWithMediaType(application/json) директива, причина, по которой Json маршалируется только до application/json Тип носителя:

implicit def sprayJsonMarshaller[T](implicit writer: RootJsonWriter[T], printer: JsonPrinter = PrettyPrinter) = 
    Marshaller.delegate[T, String](ContentTypes.`application/json`) { value ⇒ 
    val json = writer.write(value) 
    printer(json) 
    } 
+0

Отлично, спасибо Алекс. Я пропустил этот важный момент в документации, разве это там на spray.io? – ThaDon