Как я могу преобразовать объект Java в Json в маршрутизации спрея

Я хотел бы знать, есть ли способ вернуть объект Java в виде строки Json внутри маршрутизации распыления.

На данный момент я конвертирую свой объект Java (который возвращается моему UserActor) в Json, используя Джексона через созданный мной класс util (JacksonUtil).

Вот фрагмент кода для справки:

val route = {
    path("users" / Segment) { id =>
      parameterMap { params =>
        get {
          respondWithMediaType(MediaTypes.`text/plain`) {
            val resource: GetResource = new GetResource
            resource.searchCriteriaList.add(new SearchCriteria("userId", "=", Segment)) 
            logger.info("Request Received in new route: " + resource)
            onComplete(callUserActor(resource)) {
              case Success(ret: User) => {
                logger.info("Request complete. Success.")
                complete(JacksonUtil.toJson(ret))
              }
              case Failure(error) => {
                logger.info("Request complete. Failure. " + error)
                complete("Error: " + error)
              }
            }
          }
        }
      }
    } 
  }

def callUserActor(getResource: GetResource): Future[User] = {
    (userActor ? getResource).mapTo[User]
  }

GetResource — это класс, который принимает параметры запроса. Например, если клиент нажимает GET /users/123, то GetResource добавит критерий поиска как userId = "123"


person dj_1993    schedule 30.11.2016    source источник


Ответы (2)


Я думаю, вам нужно сделать это самостоятельно, например, с помощью Jackson или с помощью LiftJson в соответствии с вашими потребностями и простотой использования. Спрей не предоставляет такую ​​функцию по умолчанию, так как у него нет зависимостей для этого!

Вы можете увидеть зависимости компиляции, используемые спреем, здесь: https://mvnrepository.com/artifact/io.spray/spray-routing_2.11/1.3.4

Скриншот:

введите здесь описание изображения

person Shiv4nsh    schedule 30.11.2016

Это должно сработать для вас так же просто, как:

class YourService(implicit val requestTimeout: Timeout)
extends HttpServiceActor with
   Json4sJacksonSupport {

  path("users" / Segment) { id =>
    parameterMap { params =>
      get {
        respondWithMediaType(MediaTypes.`text/plain`) {
          val user : Future[User] = Future { User("name", "90") }
          complete(user)
          }
        }
      }
    }  
  }

  implicit def json4sJacksonFormats: Formats = DefaultFormats.lossless
}
person Emiliano Martinez    schedule 30.11.2016