【问题标题】:How to send validated object to RabbitMQ in Play 2.5.x with Scala?如何使用 Scala 在 Play 2.5.x 中将经过验证的对象发送到 RabbitMQ?
【发布时间】:2016-07-12 03:46:01
【问题描述】:

我正在使用 Play 2.5.x 来处理 HTTP 请求。发送到我的服务器的数据是 JSON 格式。所以 play 的 json 库就像import play.api.libs.json._ 一样使用。

我处理请求的操作如下:

def sendItems = Action(BodyParsers.parse.json) { req =>
  val result = SMSItemObj.readItems(req.body)
  result.fold(
    errors => {
      BadRequest(Json.obj("status" -> "KO", "message" -> JsError.toJson(errors)))
    },
    items => {
      channel.basicPublish("", QUEUE_NAME, null, items.getBytes)
      Ok(Json.obj("status" -> "OK"))
    }
  )
}

SMSItemObj 定义如下:

case class SMSItem(phone: String, content: String)
object SMSItemObj {
  implicit val smsItemReads: Reads[SMSItem] = (
    (JsPath \ "phone").read[String] and
      (JsPath \ "content").read[String]
    )(SMSItem.apply _)

  def readItem(json: JsValue) = json.validate[SMSItem]

  def readItems(json: JsValue) = json.validate[List[SMSItem]]
}

但是,items.getBytes 无法编译,看来 scala List 无法转换为 java 字节。

我正在使用amqp-client 3.6.1

"com.rabbitmq" % "amqp-client" % "3.6.1"

【问题讨论】:

    标签: json scala playframework rabbitmq playframework-2.5


    【解决方案1】:

    我认为您想要的是将您的项目转换为 JsArray,然后将数组序列化为 String,最后获取要发送到 rabbitMQ 的字节。

    通过 play,您可以创建一个负责读取和写入 Json 的 Format 类。

    您可能还只想使用 scala 可序列化或任何序列化库来序列化模型并将字节发送到 RabbitMQ,但在这种情况下,从 RabbitMQ 读取的应用程序应该具有相同的模型和序列化程序才能读取消息。

    享受吧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      相关资源
      最近更新 更多