2016-07-12 2 views
0

나는 Play 2.5.x를 사용하여 HTTP 요청을 처리하고 있습니다. 내 서버로 보낸 데이터는 JSON 형식입니다. 따라서 재생의 json 라이브러리는 import play.api.libs.json._처럼 사용됩니다.Scala를 사용하여 Play 2.5.x에서 RabbitMQ에 유효성이 검사 된 개체를 보내는 방법은 무엇입니까?

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 컴파일 할 수없는, 스칼라 목록을 변환 할 수 없습니다 보인다 다음과 같이

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가 정의 다음과 같이 요청을 처리 할 수 ​​

내 행동입니다 java 바이트.

나는 amqp-client 3.6.1을 사용하고 있습니다.

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

답변

0

나는 당신이 원하는 것은 그런 다음 JsArray에 항목을 변환 문자열의 배열을 직렬화하고 마지막 바이트가 rabbitMQ로 전송하는 얻을 생각합니다.

재생을 사용하면 Json을 읽고 쓰는 책임을지는 Format 클래스를 만들 수 있습니다.

scala serializable 또는 serialization 라이브러리를 사용하여 모델을 serialize하고 RabbitMQ로 바이트를 보내려는 경우도 있습니다.이 경우 RabbitMQ에서 읽는 응용 프로그램은 동일한 모델 및 serializer를 사용하여 메시지를 읽을 수 있어야합니다. .

즐기십시오.