저는 spray.io와 scala에 관해서 매우 신심이 많으므로 언 마샬링과 관련하여 여기에서 전문 용어를 얻지 못하면 미리 사과드립니다.http POST에서 spray.client를 사용하여 unmarshalling 오류가 발생했습니다.
파이프 라인을 사용하여 HTTP POST 응답을 내 손에 넣으려고합니다. 인증 헤더가 필요하기 때문에 실패 할 것으로 예상되지만, 지금은 무시해 보겠습니다. 나는 URL에 게시 크롬 확장 우체부를 사용하는 경우
, 나는 평범하고 단순 JSON을이 응답을 얻을 :
{"status":"error","message":"You must identify yourself to access this resource.","url":"https://scrive.com/login"}
그래서 나는이 응답을 내 자신의 경우 클래스를 만들기 시작하고, 구현 내 자신의 JsonProtocol. 응답을 비 정렬 화합니다.
이제 파이프 라인을 실행하고 응답을 받겠습니다.
val pipeline = sendReceive ~> unmarshal[CreateFromTemplateResult]
val response = pipeline {
Post("https://api-testbed.scrive.com/api/v1/createfromtemplate/1")
}
response onComplete {
case Success(CreateFromTemplateResult(status, message, url)) =>
requestContext.complete("success")
case Failure(error) =>
requestContext.complete(error.getMessage)
}
는 요청이 완료되고 onFailure의 경우는 실행되지만 error.getMessage 이전 우체부 예에서와 같이 더 이상 JSON 없습니다.
Status: 403 Forbidden
Body: {"status":"error","message":"You must identify yourself to access this resource.","url":"https://scrive.com/login"}
그래서 제 질문은, 어떻게 오류가 반환 비 정렬 화합니다되고 내 CreateFromTemplateResult 케이스에 몸을입니까? 아니면 단순히 json도 할 것입니다. 내 onSuccess 케이스가 작동할지 모르겠다. 나는 그 (것)들을 위해 동일한 행동을 원한다. 나는 그들이 정의 된 CreateFromTemplateResult 형식으로 있기를 원합니다.
case class CreateFromTemplateResult(status: String, message: String, url: String)
당신의 시간 주셔서 대단히 감사합니다, 다시, 내 나쁜 용어 드려 죄송합니다.
감사합니다. 시험해 보겠습니다. 내 자신의 unmarshaller를 작성하고 HttpResponse를 직접 처리하는 방법은 무엇입니까? 흥미로운 것 같습니다. –
'unmarshal'의 구현을 살펴보면 꽤 간단한 함수입니다. 그냥 복사해서 상태를 확인하는 방식을 바꿀 생각입니다. – lmm