Как я могу преобразовать объект Java в Json в маршрутизации спрей
Я хотел бы знать, есть ли способ вернуть Java-объект как Json String внутри маршрутизации спрея.
На данный момент я конвертирую свой Java-объект (который возвращен мой UserActor) в Json с помощью Jackson через класс утилит (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".
2 ответа
Это должно работать для вас, так же просто, как:
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
}
Я думаю, что вам нужно сделать это самостоятельно, например, с помощью Jackson или LiftJson в соответствии с вашими потребностями и простотой использования. Спрей не предоставляет такую функцию по умолчанию, поскольку у него нет зависимостей для этого!
Вы можете увидеть зависимости компиляции, используемые Spray, здесь: https://mvnrepository.com/artifact/io.spray/spray-routing_2.11/1.3.4
Скриншот: