Fre*_*man 1 rest scala akka akka-http
我正在使用Akka Http,在这里我将路线定义为
val route = (path(HttpConstants.CreateJob) & post) {
(entity(as[JobDetailsEntity]) & entity(as[JobEntity])) {
(jobDetailsEntity: JobDetailsEntity, jobEntity: JobEntity) =>
val updatedJobEntity = jobEntity.copy(runningSince = DateTime.now().getMillis)
val updatedJobDetailsEntity = jobDetailsEntity.copy(runningSince = DateTime.now().getMillis).copy(modify_date = DateTime.now().getMillis)
complete {
createJobDetails(updatedJobDetailsEntity).map(_.asJson)
createJob(updatedJobEntity).map(_.asJson)
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我试图在同一POST调用中解组两个实体,当我的json Payload id较小(即几个字节)然后正常工作时,该实体工作,一旦有效负载大小增加,即10-20 kb左右,它将引发错误:
Substream Source cannot be materialized more than once
请参阅https://github.com/akka/akka-http/issues/745#issuecomment-271571342
简而言之,如果您需要将实体解组两次,则应首先使用toStrict来确保整个实体都已在内存中缓冲,否则第一个解组过程将耗尽整个实体,而第二个则无法使用。
只是偶然地,如果实体足够小以至于它可以放入akka的内部缓冲区中,它就会在没有toStrict的情况下起作用,那么实际上就没有消耗。