나는 다음 구문을 사용 : 나는 동일한 작업을 수행하기 위해 노력하고있어 GET 요청에 대한 지금스프레이의 GET 요청에 대해 다른 상태 코드로 어떻게 대응해야합니까? POST와 PUT 요청에 대한
put {
entity(as[CaseClass]) { entity =>
returnsOption(entity).map(result => complete{(Created, result)})
.getOrElse(complete{(NotFound, "I couldn't find the parent resource you're modifying")})
}
}
을,하지만 난 내 PUT 솔루션과 유사하게 동작하지 않습니다. GET 요청으로이 작업을 수행하는 좋은 방법은 무엇입니까?
업데이트 :이 다음과 같은 해킹 작업있어 한 :이 문제를 제공하기 때문에, 내가 () =>
또는 ctx =>
함께 할 수 유사한 무언가를 기대할 수 있지만,이 운행하지 않는
(get & parameters('ignored.?)) {
//TODO find a way to do this without ignored parameters
(ingored:Option[String]) => {
returnsOption().map(result => complete(result))
.getOrElse(complete{(NotFound, "")})
}
}
마샬링을 사용하여 :
... could not find implicit value for evidence parameter of type spray.httpx.marshalling.Marshaller[(spray.http.StatusCodes.ClientError, String)]
}).getOrElse(ctx.complete{(NotFound, "")})
^
내가 어떻게 스프레이 - json을 사용한다는 사실과 관련이있을 수 있습니까?
그게 효과가 있지만 그 옵션에 따라 다른 StatusCode를 반환하고자합니다. 완료 할 옵션을 매핑하면 시작할 때 한 번만 실행됩니다. 이는 내 의도가 아닙니다. – iwein
그 이유는 위의 문서를 읽어야하는 이유입니다. 중요한 것은 'ctx =>'로 시작하는 블록 안의 코드 만 각 요청에 대해 실행되도록 보장하고 다른 코드는 (요청 처리 시간에있을 수도 있지만 반드시 필요한 것은 아닐 수도 있음) 실행될 수 있다는 것을 이해하는 것입니다. 경로 _building_ 시간. – jrudolph
@jrudolph 그 부분을 반영하도록 질문을 편집하겠습니다. 이제 코드가 옵션의 내용에 따라 다른 상태 코드를 반환하면 완전히 질문에 대답하게됩니다. – iwein