我正在使用Spray构建一些自定义指令,我发现了一个问题:
当一条路线被拒绝时,我认为它立即完成了拒绝。然而,它不是,它试图完成内部路线。例如,在此代码中:
path("users") {
post {
entity(as[User]){
user =>
directive_always_reject(){
println("Hello")
complete(200, "Hello")
}
}
}
}
"你好"即使指令被拒绝,也会一直打印。
我一直认为当一条路线被拒绝时,它不会继续进入内部路线(或至少是我理解它的方式) 我是否误解了Spray的某些内容,或者我的代码中有错误?
谢谢!
[更新1]
directive_always_reject()的实现可以是:
def directive_always_reject[T]() : Directive0 = {
reject(
new ValidationRejection("Some error")
)
}
[更新2]
我看到可以将println
放在complete
函数中。
path("users") {
post {
entity(as[User]){
user =>
directive_always_reject(){
complete {
println("Hello")
"Hello"
}
}
}
}
}
但是这个解决方案不适用于我,因为在我的真实代码中,我将RequestContext
传递给另一个完成请求的actor。