Получить объект Json с помощью spray.json

Я использую спрей, и мне нужно вернуть объект json через метод.

val route = 

path("all-modules") {
        get {
          respondWithMediaType(`text/html`) {
            complete( configViewer.findAllModules.toString)
          }
        }
      }

Это печатает ConfigResults(S1000,Success,List(testDataTypes, mandate, sdp))

Но мне нужно получить это как объект json. как мне это сделать?

Я пробовал таким образом

 val route =

    path("all-modules") {
      get {
        respondWithMediaType(`application/json`) {
          complete{
            configViewer.findAllModules
          }
        }
      }
    }

Выдает ошибку компиляции could not find implicit value for parameter marshaller: spray.httpx.marshalling.ToResponseMarshaller


person Shashika    schedule 28.02.2014    source источник
comment
Кстати. обычно вам не нужно использовать директиву respondWithMediaType. Маршаллер автоматически определит, какой тип контента использовать.   -  person jrudolph    schedule 28.02.2014


Ответы (1)


Вам нужно сообщить Спрей, как он должен сериализовать ваш класс case.

Просто настройте что-то вроде

object JsonSupport {
    implicit val formatConfigResults = jsonFormat3(ConfigResults)
}

Число в jsonFormat'number' означает количество членов в вашем классе case.

Затем вам просто нужно импортировать в свой маршрут класс, в котором вы определяете это неявное.

import JsonSupport._
person Arnaud Gourlay    schedule 28.02.2014
comment
Если речь идет о spray-json, ему нужны import DefaultJsonProtocol._ и дополнительные import SprayJsonSupport._ в файле маршрутизации. - person jrudolph; 28.02.2014