簡體   English   中英

如何在噴塗路由中將Java對象轉換為Json

[英]How can I convert Java object to Json in spray routing

我想知道是否有任何方法可以將Java對象作為Json String返回到內部噴塗路由中。

現在,我正在使用Jackson通過我創建的util類(JacksonUtil)將我的Java對象(返回我的UserActor)轉換為Json。

以下是供參考的代碼段:

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將添加searchcriteria作為userId =“123”

我認為您需要自己做,例如使用Jackson或根據您的需求和易用性使用LiftJson 默認情況下,Spray不提供此功能,因為它沒有依賴性!

您可以在此處查看spray使用的編譯依賴項: https//mvnrepository.com/artifact/io.spray/spray-routing_2.11/1.3.4

截圖:

在此輸入圖像描述

這應該適合你,簡單如下:

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM